为什么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。
答案 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]];