2009-10-21 59 views

回答

6

是的。它將創建一個NSArray對象並將其存儲在堆上。 arrayWithObject方法返回一個自動釋放對象,但是額外的retain語句會確保引用計數至少爲1,並且內存在您明確釋放它之前不會被釋放。

可能值得添加,它不是分配內存的「retain」語句,內存是由arrayWithObject方法分配的。 retain語句只是增加該對象的引用計數。

+0

什麼意思 內存分配在arrayWithObject方法 – 2009-10-22 07:20:08

+1

[[NSArray arrayWithObjects:@「Hai」,@「​​iHow」,nil] retain];包含兩個方法調用「arrayWithObjects」和「retain」。它是分配內存的arrayWithObjects,而不是保留。 – 2009-10-22 08:21:28

5

要添加到湯姆的正確答案,該行:

[NSArray arrayWithObjects: ...] 

等同於:

[[[NSArray alloc] initWithObjects:...] autorelease] 

因此,而不是跟蹤一個retain到第一線,你可能只是做:

[[NSArray alloc] initWithObjects:...] 

在任何情況下,內存分配在alloc,無論是方法d出現在你的代碼中或者是隱式的(因爲它是在像第一個類一樣的自動釋放類方法的方便調用中)。