gpt4 book ai didi

cocoa - 核心基础与基础

转载 作者:行者123 更新时间:2023-12-03 16:01:13 24 4
gpt4 key购买 nike

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

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

最佳答案

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

从实际意义上来说,不,它并没有更快。一方面,速度差异很小。我们说的是在整个过程的生命周期中节省的毫秒数。

在 iPhone 上节省的费用可能更大,但这仍然是您可以获得的最小速度提升。您最好将时间花在在 Instruments 中分析您的应用程序,然后按照它告诉您的地方进行操作,并消除您自己代码中的热点。

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

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

(从技术上讲,您可以自动释放CF对象,但是这样做的代码非常丑陋,而且您只是削弱了已经很小的速度增益。)

所以,尽可能坚持使用 Foundation。不要过度使用自动释放;即使在纯 Cocoa 中,有时仍然需要显式释放对象(主要是紧密循环),对于 Cocoa Touch 来说,这种情况会加倍(因为如果分配太多内存,iOS 会杀死您的应用程序,因此您需要释放大的内存)尽快像图像这样的对象)。但通常情况下,自动释放为您节省的时间比 CF 为您的用户节省的时间要多得多。

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

关于cocoa - 核心基础与基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3773776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com