【发布时间】:2012-01-23 02:57:06
【问题描述】:
@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..
在上面的代码中,我将 3 个对象分配给了一个 MutableArray。 每次分配它们时,setter 函数都会对 newObj 执行 retain 并在 oldObj 上执行 release。那么既然setter方法已经释放了,那么当autorelease启动第二次释放对象时会不会有问题呢?
【问题讨论】:
-
是的。但是你有一个错字:缺少括号 [ 在 NSMutableArray 前面
-
我已经编辑了上面的问题,以包括我对您的回答提出的后续问题。谢谢
-
不,它不会泄漏。您正在自动释放它们,因此即使设置器保留它们,自动释放池也会被刷新,并且设置器中的释放也将被调用,因此 2 的保留计数最终将为 0。再说一遍,这段代码没有错:)
标签: iphone objective-c memory-management memory-leaks autorelease