2011-08-18 82 views
1

我對NSStrings是否應該保留和合成有點困惑。我有一個NSString值作爲實例變量,並保留併合成它。但我分配,如它不同的值:需要保留併合成NSStrings?

self.value = @"VALUE"; 
.... 
self.value = @"DIFFERENT_VALUE"; 

我沒有實際調用alloc隨時隨地。我需要保留並綜合這個變量嗎?

回答

3

你可以因爲你使用它們就會自動被複制的訪問者認爲對即時字符串作爲你如何使用這些術語自動釋放,但在現實中,他們可能會呆在身邊爲固定值或...保留(但是你標記了訪問器),所以你需要在dealloc中釋放它們。

至於需要@synthesize,請記住,所有爲您做的事實際上是創建get/set方法,將變量放入您的iVar中。所以,不管你要麼需要@synethsize屬性或自己創建的get /方法 - 通常遠只是爲了更好地使用@sythesize.

0

如果你從來沒有alloc'ed他們,你通常不需要保留的,但如果他們在你的對象實例變量,他們可能被標記爲在你的對象的dealloc方法保留副本所以你應該釋放這些對象,如果它有一個值。

1

你應該爲你永遠不會知道你將如何改變未來使用的代碼。將代碼更改爲使用動態創建的字符串,如果不遵循規則,則會中斷。

另請注意,NSString的最好的做法是將其設置爲副本而不是保留。原因很簡單,這可以防止字符串在你的腳下被改變。

詳情請參閱NSString property: copy or retain?

+1

我不知道誰downvoted這一點。我沒有看到這個答案有什麼問題。 – Chuck