在iPhone开发中,速度至关重要。有人知道使用核心方面的类型(例如CFMutabledictionaryRef)与基础类型(其对手,nsmutabledictionary)之间是否存在速度差异。

我认为操纵CF类型的速度会更快,因为它不必绕过OBJC运行时消息,这是一个毫无根据的假设,是否有人真正看过这一点?

有帮助吗?

解决方案

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

从实际意义上讲,不,它并不快。一方面,速度差异是 微小的. 。我们正在谈论在整个过程的生命中拯救的毫秒。

iPhone上的节省可能会更大,但这仍然是您可以获得的最小速度增长。您的时间最好花在仪器中的应用程序中,然后去告诉您并用自己的代码熨烫热点。

这就是基础变得更快的地方: 您的 时间。

使用Foundation的自动发行功能的代码,每当可行的情况下,可以通过避免易于避免的内存泄漏来节省大量时间和头痛(即,忘记写作或无法达到 release 消息)。 CF没有自动发行,因此您必须记住明确的 CFRelease 您使用它创建或复制的所有内容 - 当您忘记或无法达到该代码时(我的确是指 什么时候- 我从经验中说话),您将花费更多的时间来追捕记忆泄漏。静态分析仪会有所帮助,但永远无法捕捉所有内容。

(从技术上讲,您 能够 Autorelease CF对象,但是这样做的代码非常丑陋,您只是在浇水已经浇水的速度增益。)

因此,尽可能坚持基础。不要超越自动发行;即使在纯可可中,有时候有必要明确释放对象(大部分是紧密的循环),这对于可可触摸而言是两倍(因为如果您分配了太多的内存,iOS会杀死您的应用对象尽快像图像)。但是通常,Autorelease节省了比CF节省您的用户更多的时间。

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

其他提示

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

至少彼得·霍西(Peter Hosey)提到的原因,高级语言结构比低级语言构造更可取。为此,我们可以添加过早的优化,该优化可以很容易地导致项目的失败,因为开发人员更关心应用程序的非功能方面而不是功能性方面。

如果在拥有功能齐全的应用程序之后,您会认为代码的某些部分具有性能瓶颈,则可以通过将它们重写为低级语言构造来尝试优化它们。您至少将与当前代码有一个比较点,以确保低级代码的行为符合预期(手动或单位测试都可以在此处解决问题)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top