请告诉我哪一个是以下方法中的最佳方法?
@implementation Person
@synthesize name;
- (void)dealloc { [self.name release]; [super dealloc]; }
@end
@implementation Person
@synthesize name;
- (void)dealloc { [name release]; [super dealloc]; }
@end
@implementation Person
@synthesize name;
- (void)dealloc { [name release]; name = nil;[super dealloc]; }
@end
答案 0 :(得分:2)
第一个肯定是错的:
不要在初始化方法和dealloc中使用访问器方法。唯一的 您不应该使用访问器方法来设置实例变量 在初始化方法和dealloc中。
<小时/> 现在,第二个是Apple在他们的示例应用程序中使用的。
<小时/> 在我看来,虽然最后一个是(可能)最好的,因为通过将指针设置为
nil
可确保对(已释放)指针的任何调用只会将消息转发到nil
(这是安全的) ,对释放对象的调用不是)。另请注意,如果将该属性定义为retain
设置为nil
,则还会调用release
。
答案 1 :(得分:0)
这个对我来说是最好的
@implementation Person
@synthesize name;
-(void)dealloc {
self.name = nil;
[super dealloc];
}
@end
你的第一个错误是错误的
答案 2 :(得分:0)
对于非ARC版本,第三个是最好的,因为它通过将释放变量指向nil
来处理它。
但是根据Apple的建议,请使用ARC来构建项目。
来自APPLE的文件
在自动参考计数或ARC中,系统使用相同的参考计数 引用计数系统作为MRR,但它插入适当的 内存管理方法在编译时为您调用。 你是 强烈建议将ARC用于新项目。如果你使用ARC,那里 通常无需了解底层实现 虽然在某些情况下可能会在本文档中描述 有帮助的。