2011-12-30 78 views
0

我是一個Objective-C程序員,我想知道我應該走多低(方法明智)。更高或更低級別?

例如,有NSURL,然後CFURL(較低)。我不確定使用更低或更高的級別會添加更多的功能,還是更快。

+2

如果您接受的答案之一是「較低」,然後根據其邏輯結論,您應該用匯編語言編寫。 – 2011-12-30 03:40:55

+0

你需要什麼功能?多少性能?通常,在開始編程之前進行優化並不是一個好策略。 – 2011-12-30 03:45:58

+4

「始終使用可用的最高級別抽象,並在測量顯示需要時抽取更低級別的抽象。」 - 克里斯漢森http://eschatologist.net/blog/?p=232 – 0x8badf00d 2011-12-30 03:48:44

回答

3

FoundationNSURL)框架類通常基於CoreFoundationCFURL)中的代碼。

對於CF類型,您通常使用不透明結構,通過使用相關函數對數據進行操作。如果您需要編寫純C代碼,那麼您需要使用CF。否則,這些可能會有點笨重,難以在地方使用。

Objective-C類也允許你做更多的事情像添加類別等

免費電話橋接

有些時候,你可能需要混合和你的代碼稍微匹配,並且它的方便地知道許多類型可以簡單地被施放。例如一個NSString可以用來代替的CFStringRef

,當我不得不這樣做是最近,當我需要做一些URL編碼的例子(NSStringstringByAddingPercentEscapesUsingEncoding:並沒有完全切斷的話)。該功能需要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-的切換就不太可能成爲答案)。