你为什么要设置为nil并释放UIViewController的属性?

时间:2011-04-20 14:01:12

标签: ios memory-management properties uiviewcontroller dealloc

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?"非常相似,但它并不完全相同

1 个答案:

答案 0 :(得分:4)

[xxx release];
self.xxx = nil;

这是错误的,因为xxx将被释放两次,建议的方法是释放iVar并将其设置为nil,而不是使用属性:

[xxx release];
xxx = nil;

不仅仅使用

的原因
self.xxx = nil;

调用setter方法可能会有一些副作用,可能会导致dealloc方法出现问题(即使用其他一些可能已经解除分配的iVar)