快速枚举nil对象

Nic*_*ore 41 objective-c fast-enumeration

这会发生什么?安全吗?

NSArray *nullArray=nil;
for (id obj in nullArray) {
  // blah
}
Run Code Online (Sandbox Code Playgroud)

更具体地说,我必须这样做:

NSArray *array=[thing methodThatMightReturnNil];
if (array) {
  for (id obj in array) {
    // blah
  }
}
Run Code Online (Sandbox Code Playgroud)

或者这样好吗?:

for (id obj in [thing methodThatMightReturnNil]) {
  // blah
}
Run Code Online (Sandbox Code Playgroud)

and*_*n22 48

通过该方法实现快速枚举,该方法- countByEnumeratingWithState:objects:count:返回0以表示循环结束.因为任何方法的nil返回0,你的循环永远不应该执行.(所以这很安全.)


omz*_*omz 17

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