清理iPhone应用程序内存的最佳做法?

jpm*_*jpm 3 iphone cocoa-touch objective-c

我看过周围的示例源代码使用不同的方式释放/解除对象,所以我想知道哪种方式被认为是"最好的".一些选项-dealloc:

1)释放对象

- (void)dealloc {
    [obj1 release];
    [obj2 release];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

2)将对象设置为nil

- (void)dealloc {
    self.obj1 = nil;
    self.obj2 = nil;
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

3)直接取消分配对象

- (void)dealloc {
    [obj1 dealloc];
    [obj2 dealloc];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

哪种方式最好?每个人的利弊?

Mar*_*rco 8

方法1是唯一推荐的方法.在你释放它们之后将它们设置为nil也是一种好习惯.

方法2仅适用于管理自己的对象/值保留的属性,因此它不是普遍适用的.如果您实现自己的setter方法,该方法在属性更改时执行其他操作,则可以通过在[dealloc]中调用它来获得不需要的副作用.

方法3违反了引用计数原则,因为它会释放对象,即使其他对象有[retain]保留,所以当其他对象接下来访问它们时,程序将崩溃.你永远不应该直接调用[dealloc] - 让运行时在最后一个所有者调用[release]时调用它.