我有分配和釋放的對象問題:目標C setter方法內存管理
,如果我有這樣的代碼:
MyObject *object = [[MyObject alloc] init];
NSMutableString *string = [[NSMutableString alloc]initWithString:@"bla"];
object.myString = string;
NSLog(@"retain count: %d",[object.myString retainCount]); //gives me 2
[string release];
NSLog(@"retain count: %d",[object.myString retainCount]); //gives me 1
比我正是我想要的。我需要的只是一個參考,我有保留計數1
但
如果我使用
object.myString = [[NSMutableString alloc]initWithString:@"bla"];
我的財產是這樣的:
@property (nonatomic,retain) NSMutableString *myString;
一個ALLOC和一個setter方法保留給我作爲保留計數2
如果我在辭職後釋放對象比應用程序崩潰。我不知道爲什麼?
那麼,我是否必須始終使用臨時引用創建對象,而不是分配給真實引用並釋放臨時引用,如第一個代碼?
或者還有其他方法嗎?
您遺漏了有關如何釋放myString以及發生崩潰的詳細信息,因此很難說出發生了什麼問題。在理論上調用'[object.myString release]'應該是可以的,但object.myString始終可能不會返回原始對象。如果您想了解原因,請使用全局斷點捕獲導致應用程序崩潰的異常。 「如何」指示設置不應該太難找到。 – benzado 2010-08-21 19:54:54