为什么NSMutableArray元素没有被释放?当它被添加像这样
问题描述:
为什么NSMutableArray的元素没有被释放:为什么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。
答
当您添加的项目是这样的:
[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]];
谢谢!不知何故,我认为init本身不会增加retainCount,但一个赋值,但现在它是明确的:) – osxdev12 2012-02-26 13:48:02
Objective C遵循约定,如果你使用init,copy或create开始的方法得到一个对象,你拥有它(保留+1),并且您必须稍后再发布。 – sch 2012-02-26 13:51:47