gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:58:09 25 4
gpt4 key购买 nike

我有:

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`.

循环 block 永远不会更改服务器

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

为什么server在循环结束后有值nil

我第一次在循环后使用这样的变量。没有想太多,我假设它会像(在旧的 C 时代)那样工作:

int i;
for (i = 0; i < n; i++)
{
...
}

最佳答案

语言定义当循环退出时循环变量将被设置为nil。该语言并未声明循环变量将具有最后一个值,恰恰相反。

在幕后,这是有充分理由的。快速迭代对基础数据做出假设。例如,当您迭代一个可变数组时,该数组可能不会在您迭代时被修改。快速迭代速度很快,除此之外,因为它不保留和释放循环变量。相反,它依赖于底层对象(例如数组)来保存引用。

但是一旦循环退出,底层对象就不再提供任何保证。该数组可能会消失,或者最后使用的数组元素可能会被删除。所以编译器要么必须保留变量,要么将其设置为 nil。设置为 nil 会更快。

关于objective-c - 为什么循环后循环变量变成 `nil`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38445276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com