我有很多viewControllers。
并且所有这些都有许多保留的属性。
所以,我会将这些代码添加到每个viewControllers:
- (void)viewDidUnload {
self.every_retained_property = nil;
[super viewDidUnload];
}
- (void)dealloc {
[every_retained_property release];
[super dealloc];
}
到目前为止,我的应用程序一切顺利。
但我听说了,
a_retained_property = newValue;
// equals to
[a_retained_property release];
a_retained_property = [newValue retain];
所以如果我已经在viewDidUnload中将a_retained_property设置为nil,
在dealloc中发布a_retained_property是必要的,就像我在做什么一样?
我只是想知道。
谢谢!
答案 0 :(得分:1)
这样做不会对你造成任何伤害。但
a_retained_property = newValue;
不等同于:
[a_retained_property release];
a_retained_property = [newValue retain];
相反,你应该使用:
self.a_retained_property = newValue;
答案 1 :(得分:0)
您需要在dealloc方法中释放实例变量的原因是viewDidUnload方法通常仅在您的视图因内存不足而从内存中删除后调用。在正常情况下,永远不会调用该方法,因此如果不在dealloc中释放实例变量,则在释放视图控制器时会出现内存泄漏。
答案 2 :(得分:0)
菲利普说。另外我还要补充一点,我试图'净化'我的视图生命周期回调只维护UIKit工件,并在其他地方维护我的模型和控制器对象。