44

这里应该发生什么?安全吗?

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
}
4

2 回答 2

50

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

于 2011-10-21T13:24:56.110 回答
21

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

于 2011-10-21T13:23:53.533 回答