为什么在[NSMutableArray array]之后需要此自动释放功能以避免内存泄漏?
那是Instruments告诉我的,那里有泄漏。通过将自动发布放入其中,可以解决该问题,但是我不确定为什么需要这样做。 “数组”方法不像INIT或COPY等...
@interface Weekend : NSObject {
NSMutableArray* _events;
}
@property (nonatomic, retain) NSMutableArray* events;
@end
@implementation Weekend
@synthesize events = _events;
- (id)init {
if (self == [super init])
{
self.events = [[NSMutableArray array] autorelease]; // WHY IS THIS AUTORELEASE REQUIRED
}
return self;
}
- (void) dealloc {
[_events release]; _events = nil;
[super dealloc];
}
@end
注意:这是当我将自动释放出(并且将“if(self == [super init])”)更改为“if((self = [super init]))”后在仪器中看到的
# Category Event Code Location
0 __NSArrayM Malloc at the [NSMutableArray array] point
1 __NSArrayM Autorelease at the [NSMutableArray array] point
2 __NSArrayM Retain at the @synthesize events = _events; point of the code
3 __NSArrayM Release QuartzCore - CA:Transaction::observer_callback(__CF........)
(from main.m:14 - "int retVal = UIApplicationMain(argc, argv, nil, nil);")
最佳答案
为什么需要额外的发行版?你不知道反正不在那里。
问题是您在其他地方过度保留了_events
。也许您正在将其传递给另一个未发布的保留类?泄漏始终是Instruments归因于对象创建的,而不是不平衡保留的。
添加该自动释放而不是查找不平衡的保留,相当于内存管理的答案偏离了0.3,而只需添加0.3即可解决。您需要删除它并解决实际问题。
编辑:阅读最新的编辑后,我认为您可能会发现Weekend
本身已泄漏。
关于iphone - 为什么在[NSMutableArray array]之后需要此自动释放功能以避免内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6221638/