@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开始第二次释放对象时会出现问题吗?
答案 0 :(得分:4)
是的,如果您还发布了dealloc方法,它将被正确释放:
- (void) dealloc{
[aMutableArray release];
[super dealloc];
}
另请注意,您可以使用NSMutableArray的等效方便+array
方法来缩短代码:
self.aMutableArray = [NSMutableArray array];