CoreFoundation与基金会

问题描述 投票:25回答:2

在iPhone开发中,速度至关重要。有没有人知道使用CoreFoundation类型(如CFMutableDictionaryRef)与Foundation类型(其对应的NSMutableDictionary)之间是否存在速度差异。

我认为操纵CF类型会更快,因为它不必抛出ObjC运行时消息,这是一个毫无根据的假设,有没有人真正看过这个?

cocoa core-foundation foundation
2个回答
34
投票

从技术意义上说,是的,它更快,正是出于这个原因。

从实际意义上说,不,它不会更快。首先,速度差异很小。我们说的是在整个过程的整个过程中保存的毫秒数。

iPhone上的节省可能会更大,但它仍然是您可以获得的最微小的速度增益。您可以花时间在仪器中分析应用程序并将其告诉您并在您自己的代码中解决热点问题。

这就是基金会变得更快的地方:你的时间。

在可行的情况下使用Foundation的自动释放功能的代码可以避免容易避免的内存泄漏(即忘记写入或无法访问release消息),从而为您节省大量时间和麻烦。 CF没有autorelease,所以你必须记住明确CFRelease你创建或复制的所有内容 - 当你忘记或无法达到该代码时(我的意思是 - 当我从经验中说话)时,你将花费更多追捕内存泄漏的时间。静态分析仪有所帮助,但它永远无法捕捉到一切。

(从技术上讲,你可以自动释放CF对象,但这样做的代码非常难看,而你只是在减少已经微不足道的速度增益。)

所以,尽可能坚持基金会。不要过分自动释放;即使在纯Cocoa中,仍然有时候明确释放对象是有保证的(大多数是紧密的循环),而且这对于Cocoa Touch来说是双倍的(因为如果分配太多内存,iOS会杀死你的应用程序,所以你要发布大的像图像一样的对象尽快)。但通常情况下,autorelease会比CF节省用户更多的时间。

非时间相关的原因是Objective-C代码与参数名称(来自消息选择器)混合在一起,比基于C函数的代码更容易阅读。这可能不会让你的工作更快,但它肯定会让它变得更有趣。


3
投票

在CF函数中编写代码确实会为您的应用程序带来性能提升,但是还有另一种更好的方法来提高性能:直接在汇编中编写会带来更多的性能优势(尽管这是一种极端的方法)。

至少由Peter Hosey提到的原因,高级语言结构优于低级语言结构。为此,我们可以添加过早优化,这很容易导致项目失败,因为开发人员更关注应用程序的非功能方面而不是功能方面。

如果在拥有一个功能齐全的应用程序后,您觉得代码的某些部分存在性能瓶颈,您可以尝试通过将它们重写为低级语言结构来优化它们。您将至少与当前代码进行比较,以确保低级代码按预期运行(手动或单元测试将在此处执行)。

© www.soinside.com 2019 - 2024. All rights reserved.