gpt4 book ai didi

Objective-C 设置nil和释放的区别

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

我了解到在 dealloc 中你执行 [object release]; 但在 viewDidUnload (在 UIViewController 子类中)你执行 self.object = nil。真正的区别是什么,因为 self.object = nil(我们假设对象是一个 (nonatomic, retain) 属性)保留 nil(什么都不做)然后释放旧值然后引用计数为 0 对吗?

最佳答案

self.object = nil 调用您的 setter,它将释放旧值,将成员设置为 nil,并可能做其他事情(这是一个方法,所以它可以做任何事情)。其中的“任何”部分都有潜在的危险;见this question ,例如。

[object release] 释放旧值,但将成员保留为悬空指针,这是产生错误的好方法。在 dealloc 中,这并不重要,因为指针本身也即将消失,但在任何其他情况下,释放成员而不将其设置为 nil< 是一个非常糟糕的主意.

(作为旁注,您永远不应该假设释放一个对象会使它的引用计数为 0。它释放了您的引用,但其他对象可能仍然有对它的引用。)

关于Objective-C 设置nil和释放的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1210776/

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