我使用UISearchBar
,和它的一個屬性,text
,聲明如下:我應該發佈@property(非原子,複製)嗎?
摘要:當前或開始搜索文本。
宣言:@property(nonatomic, copy) NSString *text;
我知道規則是釋放你用什麼都+alloc
,+new
或-copy
。
我所做的:
NSString *searchText = searchBar.text;
和:
[searchText release];
而且我得到了一個很好的EXC_BAD_ACCESS
消息。當我刪除發行版時,EXC_BAD_ACCESS
消息停止顯示,所以我認爲它是eror源。
問題:我不應該發佈searchText
,因爲它來自使用副本的屬性嗎?
嗯,但是......如果它將被獲取('get''ed?),它一定是在某處設置的。我不認爲這是真正的答案。真正的問題是:'copy' setter語義是否保留了與''retain''一樣的方式,與'-copy' NSObject方法一致,答案是沒有它不會,它說的是做一個獨特的副本,它'分配'。 – 2011-03-08 16:09:34
@Dan Ray,它可能會也可能不會創建一個指定的唯一副本。它可能會做很多事情。如果目標對象不可變,它可能會保留。它可能會創建一個完全不同類型的對象,與通過的對象幾乎沒有共同之處(我在C++包裝器中做了很多)。 「copy」是調用者的提示,如果你讓setter由@synthesize創建,則提供默認實現。但問題是是否要調用-release來查找-searchText的結果,答案是否定的。 – 2011-03-08 17:11:56
謝謝。得到它了。 +1的解釋。 – ofirbt 2011-03-09 09:05:03