我正在學習有關的財產,我讀各種文件,但仍有關如何物業工作不明確,橫跨其迷惑我,我創造了我創建了一個屬性的一個示例應用程序如下場景傳來:財產如何運作?
@property(nonatomic,retain)NSString *strValue;
和合成它:
@synthesize strValue;
1)第一種方案:
在viewDidLoad中我寫道:
strValue = [[NSString stringWithFormat:@"value"] retain];
在dealloc中我寫道:
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
它工作得很好,沒有任何問題leak.My這裏是:發生了什麼事內存時,我創建留置物strValue中(@屬性(非原子,保留)的NSString被保留* strValue的;)?
2)第二方案:
在viewDidLoad中我寫道:
self.strValue = [[NSString stringWithFormat:@"value"] retain];
在的dealloc我寫道:
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
這表明內存泄漏在self.strValue = [[NSString的stringWithFormat :@「value」] retain] line.Question here is:它爲什麼在這裏顯示內存泄漏?這行代碼是不是等同於以下代碼行:
[strValue release];
[strValue retain];
3)第三種情況: 在viewDidLoad中我寫道:
self.strValue = [NSString stringWithFormat:@"value"];
在dealloc中我寫道:
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
它沒有任何內存泄漏或叼着參考,是如何工作的罰款? 任何人都可以解釋屬性是如何工作的嗎?當我們使用屬性時如何分配和釋放內存?
謝謝你我的疑問,快速answer.Much是我的第一個問題我還沒有使用屬性,我用實例變量directly.So中明確now.But這種情況下它不會釋放先前的實例,對吧? –
是的,它不會。你是對的,我沒有注意到它,如果你想設置的變量它的自我,那麼你將不得不分配,這就是爲什麼您沒有收到泄漏 –
能否請您詳細闡述我的故事嗎? –