一句话笔记,某段时间内遇到或看到的某个可记录的点。 2016-7-16
- 不要在遍历可变数组时去修改数组,包括添加、删除、替换元素
- 类型注意要匹配
- Objective-C 源文件编译过程
- componentsSeparatedByString:的一个注意点
1、不要在遍历可变数组时去修改数组,包括添加、删除、替换元素。
特别说到使用for或enumerateObjectsUsingBlock遍历时,删除元素会影响到后面元素的遍历。
不过,如果想遍历的同时去删除元素,则可以采用倒序遍历(for in 也可以),这种方式是没问题的。
NSMutableArray *testArray = [NSMutableArray array];
[testArray addObjectsFromArray:@[@"1",@"2",@"3",@"4",@"5"]];
// 遍历 NSEnumerationReverse
[testArray enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(NSString * obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (idx == 1) {
[testArray removeObject:obj];
}
}];
// for in 倒序
for (NSString *obj in testArray.reverseObjectEnumerator) {
if ([obj isEqualToString:@"3"]) {
[testArray removeObject:obj];
}
}
其他情况的遍历删除,可能会出错哦,来自:南峰子的知识小集
2、类型注意要匹配
bool 型 和 字符串型转换的时候,要注意情况哦
BOOL isSelected;
BOOL isRealy = NO;
isSelected = [[NSString stringWithFormat:@"%d",isRealy] boolValue];
isSelected = [NSString stringWithFormat:@"%d",isRealy];
当然一般我们不会这样写,但是我有一次写成下面一种情况啦,木有警告只是永远打印 值为1,然后就····,自己注意下。
3、Objective-C 源文件编译过程
预处理语言对源文件进行转换主要包括文件引用、条件编译、宏展开。
#import <>
#import ""
#if ...
// TODO:
#endif
#define ...
来自:Objective-C 预处理器(The Preprocessor)
4、componentsSeparatedByString:
这个方法,字符串通过separator 字符串切割返回一个数组,记住数组永远是大于0 的,之前误认为没有这个separator字符串就会返回空,这是错误的理解。其实就算是没有的话,它会返回它本身。
- (NSArray<NSString *> *)componentsSeparatedByString:(NSString *)separator;
NSString *testString = @"ERHHJHJfd";
NSArray *array = [testString componentsSeparatedByString:@","];
NSLog(@"array == %@",array); // array == (ERHHJHJfd)
if (array > 0)
所以这种判断在此处是没有意义的。。。