2013-02-27 31 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:

不要使用財產,但你一定能夠分配給無伊娃。

相關問題