2009-04-24 56 views

回答

4

我會認爲,在處理對象時,您幾乎總是使用retain而不是assign,並且在處理基本類型,結構等時,您將使用assign(因爲您不能保留非對象)。那是因爲你想讓屬性的對象決定何時完成對象,而不是別的。 Apple的內存管理指南指出:

有時您不希望 收到的對象被丟棄;對於 示例,您可能需要將 對象緩存在實例變量中。在 這種情況下,只有當您知道何時不再需要對象 ,所以您需要 需要電源才能確保 對象未被丟棄,而您的 仍在使用它。你這樣做了 保留的消息,它可以停留未決自動釋放的效果 (或搶佔 後來釋放或自動釋放 消息)。通過保持一個對象,你 確保它不會被釋放 ,直到你用它做。

有關使用副本vs保留的討論,請參閱this SO question

0

如果您打算保留該對象,並使用它,使用保留。否則,它可能會被釋放,最終會出現代碼錯誤。

53

分配爲像BOOL,NSInteger的或雙原始值。對於使用保留或複製的對象,取決於您是要保留對原始對象的引用還是複製該對象。

唯一相同的例外是弱引用,要一個指針保持一個對象,但不能保留它,因爲參考週期。這方面的一個例子就是委託模式,其中一個對象(例如一個表格視圖)保存一個指向其委託的指針。由於委託對象保留了表視圖,因此讓表視圖保留委託將意味着任何一個都不會被釋放。在這種情況下使用弱引用。在這種情況下,您可以在創建財產時使用分配。

相關問題