2013-02-27 53 views
1

我对iOS开发相对较新,所以请原谅,如果这是一个迟缓的问题。我读过this,但我仍然有点困惑。如何在处理自动合成属性时使用dealloc?

我没有使用ARC。 (是的,是的,我知道我应该,但我不知道在这一点上)在我的类的头我有这样的

/*-----------------------------------------------------------------------+ 
| The name of the sender/receiver 
+-----------------------------------------------------------------------*/ 
@property (nonatomic, retain) NSString *name; 

我不合成这个变量,但让编译器做的工作。

下面的什么被认为是为dealloc方法

#1的dealloc伊娃

-(void) dealloc { 
    [_name release]; 
    [super dealloc]; 
} 

#2 dealloc的属性最佳实践

-(void) dealloc { 
    [self.name release]; 
    [super dealloc]; 
} 

#3和最后一个问题。通常在dealloc方法中将property设置为nil?即

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

如果有人能够向我解释这一点真的很感激。

问候!

回答

2

杰夫·拉马什写了一篇很好的文章有关在dealloc中释放变量: http://iphonedevelopment.blogspot.nl/2010/09/dealloc.html

他建议从未使用self.语法,因为它可能会导致在多线程环境的问题。

他的建议是使用iVar并在生产中设置为nil构建:

-(void) dealloc { 
    [_name release], _name = nil; 
    [super dealloc]; 
} 
+2

另外getter是一个懒惰初始化的完美场所,你不想在'dealloc'开始这个过程。我曾经有一个'-release,= nil'组合的宏,它使'dealloc'很好和清晰。这里是一个[回答](http://stackoverflow.com/a/1618867/792677)解释'逗号运算符'。 – 2013-02-27 08:51:57

0

方法1:

它是安全的使用它。使用dealloc方法释放iVar没有任何坏处。但是,当您将值赋予名称时,它必须通过属性或通过alloc方法(而非工厂方法)。

方法2:

在发布时,请勿使用属性。

方法3:

不要使用财产,但你一定能够分配给无伊娃。

相关问题