2012-02-26 52 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

相關問題