我是否泄漏了这个ObjectiveC对象?

时间:2011-12-18 17:45:37

标签: iphone objective-c memory-management memory-leaks autorelease

@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的理解,这个对象是正确发布的吗?

[编辑 - 添加问题] 但有一个问题:上面的属性有一个retain属性,所以当编译器创建setter函数时,setter代码看起来像这样:

somecode..
retain newObj
release oldObj
somecode..

在上面的代码中,我为aMutableArray分配了3个对象。 每次分配它们时,setter函数在newObj上执行保留,在oldObj上执行 release 。那么,既然setter方法已经发布了一个版本,那么当autorelease开始第二次释放对象时会出现问题吗?

1 个答案:

答案 0 :(得分:4)

是的,如果您还发布了dealloc方法,它将被正确释放:

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

另请注意,您可以使用NSMutableArray的等效方便+array方法来缩短代码:

self.aMutableArray = [NSMutableArray array];