有点想知道ios上的内存管理

时间:2012-02-24 15:15:42

标签: ios memory-management retain

我有很多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是必要的,就像我在做什么一样?

我只是想知道。

谢谢!

3 个答案:

答案 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工件,并在其他地方维护我的模型和控制器对象。