Apple文档中没有我得到的东西。这是来自UIViewController类的 - (void)viewDidUnload的摘录:
你的dealloc方法应该发布 每个对象,但也应该设置 之前对该对象的引用为零 叫超级。
如果在代码中对xxx属性使用retain和synthetize,为什么大多数Apple示例在viewDidUnload中执行set-to-nil:
self.xxx = nil;
但是建议在dealloc中执行set-to-nil和release:
[xxx release];
self.xxx = nil;
为什么dealloc的set-to-nil不够?
ps:我知道我的问题与这个"Why release a property that you've already set to nil?"非常相似,但它并不完全相同
答案 0 :(得分:4)
[xxx release];
self.xxx = nil;
这是错误的,因为xxx将被释放两次,建议的方法是释放iVar并将其设置为nil,而不是使用属性:
[xxx release];
xxx = nil;
不仅仅使用
的原因self.xxx = nil;
调用setter方法可能会有一些副作用,可能会导致dealloc方法出现问题(即使用其他一些可能已经解除分配的iVar)