我了解到,在dealloc
you do [object release];
but in viewDidUnload
(在 UIViewController 子类中)你做self.object = nil
。真正的区别是什么,因为self.object = nil
(我们假设对象是(nonatomic, retain)
财产)保留nil
(什么都不做)然后释放旧值,然后引用计数为 0,对吗?
self.object = nil
调用您的 setter,这将释放旧值,将成员设置为nil
,并且可能做其他事情(这是一种方法,所以它可以做任何事情)。其中的“任何事情”部分都有潜在的危险;看这个问题 https://stackoverflow.com/questions/192721/why-shouldnt-i-use-obective-c-2-0-accessors-in-init-dealloc, 例如。
[object release]
释放旧值,但将成员保留为悬空指针,这是产生错误的好方法。在dealloc
这并不重要,因为指针本身也即将消失,但在任何其他情况下,释放成员而不将其设置为是一个非常糟糕的主意nil
.
(顺便说一句,你永远不应该假设释放一个对象时它的引用计数为 0。它释放了你的引用,但其他对象可能仍然有对它的引用。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)