更高或更低级别?

更高或更低级别?

问题描述:

我是一个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

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编码。

如果您正在编写一个objective-c应用程序,请使用objective-c版本。通常存在CF版本,以便用C和C++编写的应用程序可以与系统API进行通信。还有一些情况下CF版本可以给你更好的控制(例如,CF集合可以被配置为存储任意指针,而不仅仅是Objective-c对象)。当你需要这种更好的控制时,请查看CF版本。否则,Objective-C版本几乎总是你想要的。一般来说,他们“更低层次”的用处更多的是他们更灵活(复杂性相应增加),而不是更快。 (fwiw,两者之间速度的任何差异将在纳秒级别,如果你确实需要在任何点进行优化,那么从NS-到CF-的切换就不太可能成为答案)。