2009-11-13 48 views
2

我對Objective-C世界很新,而且我有很長的.net/C#歷史,所以很自然地我傾向於使用我的C#智能。NSArray's,原始類型和拳擊哦,我的!

現在,這裏的問題:我覺得真的很傾向於建立某種類型簡單 Objective-C的收集保存原始類型,因爲我不喜歡包裝一個原始類型到一個對象(即NSNumber的)的整體概念和然後將其添加到NSArray等集合中。

事情是,我完全理解NSArray的唯一操作對象。但是,對我而言,我們只是因爲沒有集合存在來處理原始Integers而被迫使用盒裝原語,這對我來說實在是愚蠢。

所以C#的人就會知道我說的是在舊時代與.NET。一般來說,當泛型不在時,您可以使用簡單的數組或ArrayList。 ArrayList實質上是強迫你裝箱你的原始類型,但它實際上是在幕後做的,你付出了代價(在性能方面)。

如果你不能處理性能成本,那麼你滾動您自己的自定義集合或最終使用的泛型出現時。

在Objective-C的世界裏接縫,我們不得不再次處理這個問題,但它像蘋果開發者真的不關心,或者它只是不是一個大問題還是什麼

現在。

所以我的問題是:這裏推薦的做法是什麼?我是否應該嘗試構建自己的自定義Objective-C集合來保存NSInteger?或者我應該只使用本地C數組作爲同胞編碼器備註說明這個博客帖子:NSArray vs. C Array performance

還是我只是堅持使用蘋果的內置集合和勉爲其難。它接近Memo解釋的性能特徵在構建性能關鍵應用程序時值得考慮。

這篇文章是一口滿口,但我不得不把它從我的胸部。

+0

這只是一些錯誤,你對語言/框架,或者你有在性能受到影響,具體的案例? – sbooth 2009-11-13 04:23:37

回答

2

個人我建議使用客觀C++和std ::矢量<>;除非你真的需要使用一個本地目標C容器,因爲你不能使用對象。

0

如果你只想保存NSInteger,你可以使用常規的C數組嗎?

編輯:如果你這樣做是出於性能的考慮,這聽起來像一大堆過早優化的給我。

+0

如果你正在建設一個簡單的應用程序,只是一個NavigationController和一些UIViews ......然後是,它可能是一個不成熟的優化,但如果你正在做的事情基於圖形的,你真正關心這些微型優化比它很重要。當它涉及到這樣的事情時,你會把它拿到你能得到它的地方。 – 2009-11-13 17:44:57

+0

好點。當我的大腦充滿了一堆其他的東西時,我可能不應該屈膝回答。 ;) – Wevah 2009-11-13 23:39:17

0

我從來沒有真正需要整數的動態數組,因爲一直是對我試圖解決這個問題更好的解決方案。例如,NSData可以存儲一個字節數組,如果它是一組所需的整數,則可以使用NSIndexSet。

您也可以使用CFArrayCreate並傳入適當的回調函數(如果需要,可將其包裝在Objective-C中)。

你有沒有想要解決的具體問題?

0

通過走出去的malloc的「C」陣列方式需要考慮的陣列主人的生命週期,以釋放它。其他考慮事項ARC和調整數組大小等使'包裝'的方法吸引。我看到'C風格'的唯一原因是如果項目是一個端口或基於分析器結果。如果您決定'換行',請考慮使用類似於NSArray+Primitive的方法,該方法會創建一個向NSArray和NSMutableArray添加原始類型功能的類別。