为什么NSMutableArray元素没有被释放?

时间:2012-02-26 13:14:18

标签: objective-c nsmutablearray release dealloc

为什么NSMutableArray元素在添加时不会被释放:

[map addObject:[[FLItem alloc] init]];

[map release];

它适用于:

FLItem *item = [[FLItem alloc] init];
[map addObject:item];
[item release]; 

[map release];   

这有什么区别?

P.S。 FLItem的dealloc实现中有NSLog。

1 个答案:

答案 0 :(得分:4)

当您添加如下项目时:

[map addObject:[[FLItem alloc] init]];

或者像这样:

FLItem *item = [[FLItem alloc] init];
[map addObject:item];

它的保留计数为2,因为你使用init(即1)创建了它,而NSMutableArray也保留了它(那是另一个1)。

因此,当您释放该数组时,它将释放该项并且其保留计数变为1.因此,在第一种情况下,它不会被取消分配,而在第二种情况下,您调用[item release];它将被取消分配。

在第一种情况下你应该做的是:

[map addObject:[[[FLItem alloc] init] autorelease]];