-3

任何人都可以告诉哪一个是以下方法中最好的方法吗?

@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
4

3 回答 3

2

那么第一个肯定是错误的:

(来自 Apple 的文档)

不要在初始化方法和 dealloc 中使用访问器方法。唯一不应该使用访问器方法来设置实例变量的地方是初始化方法和 dealloc。


现在第二个是 Apple 在他们的示例应用程序中使用的。


在我看来,虽然最后一个是(可能)最好的,因为通过将指针设置为nil确保对(已释放)指针的任何调用都只会将消息转发到nil(这是安全的,对已释放对象的调用不是)。还要记住,如果属性被定义为retain设置nil也将调用release.

于 2012-07-11T10:05:48.040 回答
0

这个最适合我

@implementation Person
@synthesize name;

-(void)dealloc { 
   self.name = nil; 
   [super dealloc]; 
}
@end

你的第一个错错错了

于 2012-07-11T10:02:13.040 回答
0

对于非 ARC 版本,第三个是最好的,因为它通过将发布的变量指向nil.

但根据 Apple 的建议,请使用 ARC 来构建项目。

来自 APPLE 的文档

在自动引用计数或 ARC 中,系统使用与 MRR 相同的引用计数系统,但它会在编译时为您插入适当的内存管理方法调用。强烈建议您将 ARC 用于新项目。如果您使用 ARC,通常不需要了解本文档中描述的底层实现,尽管它在某些情况下可能会有所帮助。

于 2012-07-11T10:11:08.407 回答