【问题标题】:Memory leak of an NSMutableArray using Instruments使用 Instruments 的 NSMutableArray 的内存泄漏
【发布时间】:2011-11-08 06:42:49
【问题描述】:
根据 XCode 中的泄漏工具,它是说这条线导致内存泄漏 (100%)?
self.unsentPatients = [[NSMutableArray alloc] initWithArray:[defaults arrayForKey:UNSENT]];
我在 dealloc 上正确释放等(肯定正在运行)所以我不明白我哪里出错了?
这只是一个小漏洞,Analysis 没有提出任何建议,但它仍然是一个漏洞。
亲切的问候,
多米尼克
【问题讨论】:
标签:
iphone
cocoa-touch
memory-leaks
xcode4
instruments
【解决方案1】:
这段代码有很多问题。
我假设该属性保留了价值,那么您不应该像现在这样分配价值,而是更像:
NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:[defaults arrayForKey:UNSENT]];
self.unsentPatients = temp;
[temp release], temp = nil;
或
self.unsentPatients = [[[NSMutableArray alloc] initWithArray:[defaults arrayForKey:UNSENT]] autorelease];
您还应该避免在 dealloc 或 init 中使用 self. 语法,这将调用 mutator。
在多线程环境中,这可能会产生问题。
所以正确的dealloc应该是:
- (void) dealloc {
[unsentPatients release], unsentPatients = nil;
[super dealloc][;
}