2011-04-20 67 views
2

有些东西我没有在Apple文档中找到。下面是来自摘录 - UIViewController类的(无效)viewDidUnload:为什么要设置为零并释放UIViewController的属性?

您的dealloc方法应该释放 每个对象,但还应该设置 引用该对象零 之前调用超。

如果使用保留和代码中的XXX属性的synthetize,为什么大多数的苹果的例子做了一套对零在viewDidUnload:

self.xxx = nil; 

但recommands做两件事一组到零,释放在的dealloc:

[xxx release]; 
self.xxx = nil; 

为什么设定到零不够的dealloc的?

PS:我知道我的问题是非常相似,这一个"Why release a property that you've already set to nil?"但它是不完全一样

回答

4
[xxx release]; 
self.xxx = nil; 

这是错误的,因为XXX将得到释放两次,推荐的方法是释放伊娃并将其设置为nil ,不使用属性:

[xxx release]; 
xxx = nil; 

其原因不只是使用

self.xxx = nil; 

是调用setter方法可能有一些副作用,可能会导致dealloc方法中的问题(即,使用其他一些可能已经释放的iVar)

+0

感谢您的回答。这是否意味着如果100%确定在setter方法中没有副作用(例如当合成的方法没有被覆盖时),我们可以使用self.xxx = nil作为释放内存的唯一调用? – 2011-04-20 14:48:50

+0

我们可以,但是仍有很小的机会,setter实现将在未来发生变化并引入副作用......但在大多数情况下,self.xxx = nil应该可以正常工作 – Vladimir 2011-04-20 14:55:30

+0

非常感谢弗拉基米尔! – 2011-04-20 21:45:32

相关问题