Q
更高或更低級別?
0
A
回答
3
Foundation
(NSURL
)框架類通常基於CoreFoundation
(CFURL
)中的代碼。
對於CF
類型,您通常使用不透明結構,通過使用相關函數對數據進行操作。如果您需要編寫純C代碼,那麼您需要使用CF
。否則,這些可能會有點笨重,難以在地方使用。
Objective-C類也允許你做更多的事情像添加類別等
免費電話橋接
有些時候,你可能需要混合和你的代碼稍微匹配,並且它的方便地知道許多類型可以簡單地被施放。例如一個NSString
可以用來代替的CFStringRef
,當我不得不這樣做是最近,當我需要做一些URL編碼的例子(NSString
stringByAddingPercentEscapesUsingEncoding:
並沒有完全切斷的話)。該功能需要CFStringRef
的,但有一個簡單的投我可以用我的NSString
的
CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)stringToEncode, // <- NSString
NULL,
(CFStringRef)encodeChars, // <- NSString
kCFStringEncodingUTF8)
一般來說,你可以用脫身,你應該在可能情況下使用Foundation
類(抽象的更高層次)的他們很可能會提供相同的功能。當然,情況並非如此,例如我不得不做的url編碼。
2
如果您正在編寫一個objective-c應用程序,請使用objective-c版本。通常存在CF版本,以便用C和C++編寫的應用程序可以與系統API進行通信。還有一些情況下CF版本可以給你更好的控制(例如,CF集合可以被配置爲存儲任意指針,而不僅僅是Objective-c對象)。當你需要這種更好的控制時,請查看CF版本。否則,Objective-C版本幾乎總是你想要的。一般來說,他們「更低層次」的用處更多的是他們更靈活(複雜性相應增加),而不是更快。 (fwiw,兩者之間速度的任何差異將在納秒級別,如果你確實需要在任何點進行優化,那麼從NS-到CF-的切換就不太可能成爲答案)。
相關問題
- 1. Java更高或更低網格遊戲
- 2. Bunyan更高層次登錄到較低級別流
- 3. 提高我的最低API級別的更好方法?
- 4. 訪問Java LinkedList的更低級別?
- 5. 高,低級別的顯卡在J2ME
- 6. 更改高地圖的縮放級別
- 7. 更高級別的單元測試
- 8. angular2-bootstrap-pagination移到更高級別
- 9. 低級別和高級別數據類型
- 10. Google Cloud Endpoints需要Android SDK級別11或更高
- 11. 如果用戶訪問級別2或更高,則重定向
- 12. API級別5上的選項卡非常暗,但是API級別4更低?
- 13. 的Javascript JSON對象的多級陣列 - 如何訪問鍵值對在第二級別或更高級別
- 14. 我們可以將iphone sdk 3.1升級到更高級別嗎?
- 15. 使用低級別鍵盤掛鉤更改鍵盤字符
- 16. 更低API級別的Android可繪製形狀環
- 17. 條件相同或更低
- 18. 依賴反轉原理:高級別和低級別模塊示例
- 19. 找出哪個更高級別的功能正在進行大量的低級調用
- 20. 如何刪除比我使用的API級別更高的API級別樣式?
- 21. TCL:返回更高一級?
- 22. 在「高級更新\安裝」
- 23. 高級SQL更新問題
- 24. 在JavaScript對象字面量中,如何引用具有相同級別或更高級別的函數?
- 25. 如何定義最低JRE要求(1.5或更高_)?
- 26. 低級別Socket編程
- 27. 低級別Android調試
- 28. 低級別的細節,OSX
- 29. 發佈低優先級更新
- 30. ValueError:修剪後,沒有條款。嘗試更低min_df或更高max_df
如果您接受的答案之一是「較低」,然後根據其邏輯結論,您應該用匯編語言編寫。 – 2011-12-30 03:40:55
你需要什麼功能?多少性能?通常,在開始編程之前進行優化並不是一個好策略。 – 2011-12-30 03:45:58
「始終使用可用的最高級別抽象,並在測量顯示需要時抽取更低級別的抽象。」 - 克里斯漢森http://eschatologist.net/blog/?p=232 – 0x8badf00d 2011-12-30 03:48:44