objective-c – 为什么循环变量在循环后变为`nil`

objective-c – 为什么循环变量在循环后变为`nil`,第1张

概述我有: NSDictionary* server;for (server in self.servers){ if (<some criterium>) { break; }}// If the criterium was never true, I want to use the last item in the// the array. B 我有:

NSDictionary* server;for (server in self.servers){    if (<some criterium>)    {        break;    }}// If the criterium was never true,I want to use the last item in the// the array. But turns out that `server` is `nil`.

循环块永远不会更改服务器.

servers是带有字典的NSMutableArray,这是一个在循环期间不会更改的属性.

为什么服务器在循环结束后的值为nil?

这是我第一次在循环后使用这样的变量.没有想太多,我认为它会像(在旧的C天)一样工作:

int i;for (i = 0; i < n; i++){    ...}
解决方法 该语言定义了循环退出时循环变量将设置为nil.该语言并未声明循环变量将具有最后一个值,恰恰相反.

在幕后,有一个很好的理由.快速迭代对底层数据做出假设.例如,当您遍历可变数组时,迭代时可能不会修改该数组.除其他外,快速迭代很快,因为它不保留和释放循环变量.相反,它依赖于底层对象(例如数组)来保存引用.

但是一旦循环退出,那个底层对象就不再提供任何保证了.数组可能会消失,或者上次使用的数组元素可能会被删除.因此编译器必须保留变量,或将其设置为nil.设置为nil更快.

总结

以上是内存溢出为你收集整理的objective-c – 为什么循环变量在循环后变为`nil`全部内容,希望文章能够帮你解决objective-c – 为什么循环变量在循环后变为`nil`所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1007510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存