【问题标题】:NSMutableArray memory Management when allocated directly直接分配时的 NSMutableArray 内存管理
【发布时间】:2011-12-21 19:27:36
【问题描述】:
我知道,当我们将对象 obj 添加到 NSMutableArray 中时,它会获得该对象的 co_ownership。所以我们可以在添加到 NSMutableArray 之后释放对象 obj。而当我们释放NSMutableArray的时候,它也调用了释放它里面的所有对象。所以没有内存泄漏,一切都很好。
我怀疑是否喜欢
NSMutableArray myArray = [[NMutableArray alloc] init];
[myArray addObject:[MyClass alloc] init]];
[myArray release];
这会导致我们程序中的任何内存泄漏吗?
【问题讨论】:
标签:
iphone
objective-c
memory-management
nsmutablearray
【解决方案1】:
是的,确实会导致内存泄漏。
违规行是(为了清楚起见,我已经将其拆分):
[myArray addObject:
[[MyClass alloc] init] // <- An instance is allocated with ownership
]; // <- The array retains the instance
最后,the retain/release ownership are not balanced 并导致泄漏。
一种解决方案是在添加之前进行分配:
MyClass *obj = [MyClass alloc] init];
[[myArray addObject:obj];
[obj release];
【解决方案2】:
将autorelease 放入您的MyClass。这应该可以解决任何内存泄漏
NSMutableArray myArray = [[NMutableArray alloc] init];
[myArray addObject:[[[MyClass alloc] init] autorelease];
[myArray release];