爲什麼類方法,如爲什麼在有完美的父類方法時需要這些類方法?
+ (NSMutableArray *)array;
當有完美的罰款父類的方法,如
+ arrayWithObjects:(id)firstObj, ...;
它可以設置爲
[array arrayWithObjects:nil]
,並具有相同的效果所需。
他們實際上是不是等同的東西?
爲什麼類方法,如爲什麼在有完美的父類方法時需要這些類方法?
+ (NSMutableArray *)array;
當有完美的罰款父類的方法,如
+ arrayWithObjects:(id)firstObj, ...;
它可以設置爲
[array arrayWithObjects:nil]
,並具有相同的效果所需。
他們實際上是不是等同的東西?
它們是簡便的方法,可以更快速地獲得自動釋放對象,而不必爲了得到相同的結果而寫更多的東西。
順便說一句,NSArray
沒有一個名爲arrayWithObjects
的實例方法,它們只是類方法。
雅各布的答案是正確的(所以接受那個),但我會補充說Cocoa框架有一個叫做類集羣的引人注目的東西。這個想法是,雖然你可能會打電話給[NSArray array]
,但你得到的對象實際上是NSArray
的一個私有子類,它針對你的具體情況進行了優化。這些便利的方法可以給NSArray
類提供一個「提示」,指出要使用哪個類。
例如,如果您致電[NSArray array]
,您會得到一個空的不可變陣列。那麼,一個空的不可變數組有多少個不同的值?只有一個。所以在幕後,Cocoa可以返回相同的空NSArray
給每個[NSArray array]
的調用,這樣它只需要分配其中的一個。這是一個可以節省一些內存的漂亮優化。
現在,這實際上是一個你不需要關心的實現細節,但是要考慮的是你應該使用最接近你想要的結果的構造函數,特別是對於像數組,集合,和字典,因爲蘋果公司實施了一系列優化,使您的應用程序更好地工作。
不是「+」表示arraryWithObjects是類方法嗎?我不認爲我理解爲什麼我暗示它是一個實例方法 – Devoted 2010-06-17 14:25:49
@Devoted,'[array arrayWithObjects]'試圖調用一個不存在的實例方法。 – 2010-06-17 14:26:41
您無法在Obj-C中的實例上調用類方法。正確的調用看起來像'[NSArray arrayWithObjects:nil];' – kubi 2010-06-17 14:27:36