直接分配NSMutableArray内存管理

时间:2011-11-04 07:33:41

标签: iphone objective-c memory-management nsmutablearray

我知道当我们将一个对象 obj 添加到NSMutableArray中时,它会获取该对象的co_ownership。因此,我们可以在将对象添加到NSMutableArray之后立即释放对象 obj 。当我们发布NSMutableArray时,它还会调用其中所有对象的释放。所以没有内存泄漏,一切都很好。

我怀疑是否喜欢

NSMutableArray myArray = [[NMutableArray alloc] init];
[myArray addObject:[MyClass alloc] init]];
[myArray release];

这会导致我们程序中的任何内存泄漏吗?

2 个答案:

答案 0 :(得分:4)

确实如此,它会导致内存泄漏。

违规行是(我为了清楚起见将其分开):

[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];

答案 1 :(得分:3)

autorelease添加MyClass。这应该可以解决任何内存泄漏问题

NSMutableArray myArray = [[NMutableArray alloc] init];
[myArray addObject:[[[MyClass alloc] init] autorelease];
[myArray release];