可以說我有下面的代碼:困惑內存管理與保留/自動釋放
@property (nonatomic, retain) *SomeObject foo;
@property (nonatomic, retain) *SomeObject bar;
@synthesize foo, bar;
self.foo = [[SomeObject alloc] init];
self.bar = [[[SomeObject alloc] init] autorelease];
if (self.foo) {
[self.foo release];
self.foo = nil;
}
if (self.bar) {
[self.bar release];
self.bar = nil;
}
我得到self.bar內存泄漏。我不完全確定爲什麼,但我認爲這是因爲在調用[self.bar發佈]後,對象self.bar指向獲取autoreleased。當我清零self.bar時,我們嘗試調用前一個對象(獲得autoreleased)的釋放,這會產生錯誤。它是否正確?另外,還有其他內存泄漏,可能與富? 什麼是正確的修復?
我應該刪除發佈聲明,只是零這兩個屬性?
*咳嗽* ... ARC ... *咳嗽* –
@ RichardJ.RossIII如果我是你,我會很高興有人真的不理解MRC是如何工作的... – 2012-11-01 23:18:19
@ h2co3也許。但至少閱讀一些文章或拿起一本書,而不是不斷地發佈具有不同屬性名稱的相同問題。 –