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`所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)