快速枚举nil对象

时间:2011-10-21 13:18:18

标签: objective-c fast-enumeration

这里会发生什么?这样安全吗?

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
}

2 个答案:

答案 0 :(得分:48)

快速枚举是通过方法- countByEnumeratingWithState:objects:count:实现的,它返回0以表示循环结束。由于nil为任何方法返回0,因此您的循环永远不会执行。 (所以这很安全。)

答案 1 :(得分:16)

什么都不会发生。 for-in循环使用NSFastEnumeration协议迭代集合中的元素,因此您实际上是向nil发送一条消息,该消息在Objective-C中是安全的。