为什么要设置为零并释放UIViewController的属性?
问题描述:
有些东西我没有在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?"但它是不完全一样
答
[xxx release];
self.xxx = nil;
这是错误的,因为XXX将得到释放两次,推荐的方法是释放伊娃并将其设置为nil ,不使用属性:
[xxx release];
xxx = nil;
其原因不只是使用
self.xxx = nil;
是调用setter方法可能有一些副作用,可能会导致dealloc方法中的问题(即,使用其他一些可能已经释放的iVar)
感谢您的回答。这是否意味着如果100%确定在setter方法中没有副作用(例如当合成的方法没有被覆盖时),我们可以使用self.xxx = nil作为释放内存的唯一调用? – 2011-04-20 14:48:50
我们可以,但是仍有很小的机会,setter实现将在未来发生变化并引入副作用......但在大多数情况下,self.xxx = nil应该可以正常工作 – Vladimir 2011-04-20 14:55:30
非常感谢弗拉基米尔! – 2011-04-20 21:45:32