2011-12-23 35 views
1

與所有你的NSArray和NSMutableArray裏得到有用的東西,爲什麼你會永遠使用與Objective-C的對象「C型」陣列?空調風格數組在Objective-C

NSString *array[] = {@"dog", @"cat", @"boy"}; 
+0

更進一步的OT,有沒有關於這個c標籤問題的元討論?我自己對使用C標籤的C++和obj-c問題很脾氣暴躁。 – u0b34a0f6ae 2011-12-23 02:30:13

回答

5

對於短期,固定陣列,一個漂亮的緊湊初始化語法的可用性(因爲你已經證明)可真好。在某些情況下,與使用NSArray相比,C風格的數組也可以提供性能優勢。另一件想到的事情是,NSArray不提供任何對多維數組的內置支持,而多維C數組很容易。

當然,還有一個事實,你只能存儲對象的NSArray,不C-原始類型,但你具體問了一下使用C數組用Objective-C對象。

+0

+1。性能優勢可能是巨大的,因爲編譯器可以應用很多優化,這在使用'NSArray'時是無法完成的,因爲典型的objective-c特性,例如類別和方法混合,(理論上)可能會改變'NSArray'的行爲。 – mvds 2011-12-23 02:01:24

+0

你仍然可以使用通常的C語言成語sizeof(array)/ sizeof(array [0])來計算嗎?你可以使用'sizeof(array)/ sizeof([array class])'? – edelaney05 2011-12-23 02:58:34

1

所有有用的東西都是有代價的。

曾經嘗試製作intsNSArray?你不能。您必須使用NSNumber

爲什麼?因爲NSArray不知道如何處理它不知道如何進行內存管理......並且唯一符合內存管理要求的東西是基於NSObject的東西。

這只是一個例子,但也有很多其他的。

底線是,很少有過一個單一的「最佳」答案什麼。 NSArray也不例外。