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