更高或更低级别?
我是一个Objective-C程序员,我想知道我应该走多低(方法明智)。更高或更低级别?
例如,有NSURL,然后CFURL(较低)。我不确定使用更低或更高的级别会添加更多的功能,还是更快。
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编码。
如果您正在编写一个objective-c应用程序,请使用objective-c版本。通常存在CF版本,以便用C和C++编写的应用程序可以与系统API进行通信。还有一些情况下CF版本可以给你更好的控制(例如,CF集合可以被配置为存储任意指针,而不仅仅是Objective-c对象)。当你需要这种更好的控制时,请查看CF版本。否则,Objective-C版本几乎总是你想要的。一般来说,他们“更低层次”的用处更多的是他们更灵活(复杂性相应增加),而不是更快。 (fwiw,两者之间速度的任何差异将在纳秒级别,如果你确实需要在任何点进行优化,那么从NS-到CF-的切换就不太可能成为答案)。
如果您接受的答案之一是“较低”,然后根据其逻辑结论,您应该用汇编语言编写。 – 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