【问题标题】:Fast enumeration over nil object快速枚举 nil 对象
【发布时间】:2011-12-12 14:13:09
【问题描述】:

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

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
}

【问题讨论】:

  • @JeremyP:我自己差点这么说,但很高兴知道它不仅可以正常工作,而且可以按设计工作,它的工作存在独立于实现的原因,而且很可能继续在 OS X 的未来版本中工作。
  • @JeremyP 说真的。在我问这个问题之前我已经这样做了,它没有错误。但这并不能证明任何事情,因为这可能是侥幸。我一直在寻找它背后的理论。

标签: objective-c fast-enumeration


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 2013-04-26
      • 1970-01-01
      相关资源
      最近更新 更多