这里会发生什么?这样安全吗?
NSArray *nullArray=nil;
for (id obj in nullArray) {
// blah
}
更具体地说,我是否必须这样做:
NSArray *array=[thing methodThatMightReturnNil];
if (array) {
for (id obj in array) {
// blah
}
}
或者这样好吗?:
for (id obj in [thing methodThatMightReturnNil]) {
// blah
}
答案 0 :(得分:48)
快速枚举是通过方法- countByEnumeratingWithState:objects:count:
实现的,它返回0以表示循环结束。由于nil
为任何方法返回0
,因此您的循环永远不会执行。 (所以这很安全。)
答案 1 :(得分:16)
什么都不会发生。 for-in循环使用NSFastEnumeration
协议迭代集合中的元素,因此您实际上是向nil
发送一条消息,该消息在Objective-C中是安全的。