gpt4 book ai didi

objective-c - 是否需要在释放ivar的同时将合成的ivar设置为nil?

转载 作者:太空狗 更新时间:2023-10-30 03:29:22 24 4
gpt4 key购买 nike

我看到代码(可能是 Apple 自己的示例代码)以这样的方式编写,它在 dealloc 中释放 ivar 并在 viewDidUnload 中设置属性。

例如

- (void)viewDidUnload
{
self.navigationController = nil;
}

- (void)dealloc
{
[_navigationController release];
}

为什么他们在两个地方?另外,为什么在一个中设置 nil 而在另一个中释放。似乎 self.property = nil 会处理所有事情,因为它会释放并将 ivar 设置为 nil。

最佳答案

你是对的:你确实可以在任何地方执行 self.property = nil,包括 dealloc。唯一的缺点是,如果 setter 方法做的事情比释放 ivar 更复杂,您可能最终会尝试访问其他已经释放的字段,等等。

至于为什么在viewDidUnload中还要释放outlet,那是内存优化。由于您在 viewDidUnload 中释放的内容将在再次加载 View 时重新实例化,因此在内存不足的情况下释放它们可以释放内存。

关于objective-c - 是否需要在释放ivar的同时将合成的ivar设置为nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1004062/

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