2012-02-26 29 views

回答

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]]; 
+0

谢谢!不知何故,我认为init本身不会增加retainCount,但一个赋值,但现在它是明确的:) – osxdev12 2012-02-26 13:48:02

+1

Objective C遵循约定,如果你使用init,copy或create开始的方法得到一个对象,你拥有它(保留+1),并且您必须稍后再发布。 – sch 2012-02-26 13:51:47

相关问题