1
@interface foo: NSObject 
@property (nonatomic, retain) NSMutableArray *aMutableArray; 
@end 

@implementation 
@synthesize aMutableArray 

-(void)somefunction { 
    // Illustration 
    self.aMutableArray = [[[NSMutableArray alloc]init]autorelease]; 
    self.aMutableArray = [[[NSMutableArray alloc]init]autorelease]; 
    self.aMutableArray = [[[NSMutableArray alloc]init]autorelease]; 
} 
@end 

我已經做了類似的代碼代碼,這在我的程序的其他部分,但我需要的是一定的,這不會導致內存泄漏。隨着我對autorelease的理解,這個對象被正確釋放了嗎?我泄漏這個ObjectiveC對象嗎?

[編輯 - 添加問題]雖然 一個問題:上面的酒店有保留屬性,所以當編譯器創建setter函數,二傳手代碼會是這個樣子:

somecode.. 
retain newObj 
release oldObj 
somecode.. 

在上面的代碼中,我將3個對象分配給了一個MutableArray。 每個它們分配時間,setter函數做了在newObj保留並在oldObj一個釋放。所以,由於setter方法已經發布了,autorelease在第二次釋放對象時會出現問題嗎?

+0

是。但是你有一個錯字:缺少括號[在NSMutableArray中的前 – LuckyLuke 2011-12-18 17:48:00

+0

感謝..編輯 – 2011-12-18 17:55:45

+0

我已經編輯了以上問題,包括後續的問題,我有你的答案。謝謝 – 2011-12-18 18:26:53

回答

4

是的,它會被正確釋放,如果你也釋放它dealloc方法:

- (void) dealloc{ 
    [aMutableArray release]; 
    [super dealloc]; 
} 

還要注意的是,你可以使用的NSMutableArray的等效方便+array方法縮短你的代碼:

self.aMutableArray = [NSMutableArray array]; 
+0

感謝您的方便方法提示。這說明雖然,代碼要複雜得多:) – 2011-12-18 17:58:59

+0

+1(我加你爲'[超級的dealloc]未接來電') – 2011-12-18 18:15:41

+0

我已經編輯了以上問題,包括後續的問題,我有你的答案。謝謝。 – 2011-12-18 18:23:49