grm*_*tin 27 cocoa core-foundation foundation
在iPhone开发中,速度至关重要.有没有人知道使用CoreFoundation类型(如CFMutableDictionaryRef)与Foundation类型(其对应的NSMutableDictionary)之间是否存在速度差异.
我认为操纵CF类型会更快,因为它不必抛出ObjC运行时消息,这是一个毫无根据的假设,有没有人真正看过这个?
-詹姆士
Pet*_*sey 36
从技术意义上说,是的,它更快,正是出于这个原因.
从实际意义上说,不,它不会更快.首先,速度差异很小.我们说的是在整个过程的整个过程中保存的毫秒数.
iPhone上的节省可能会更大,但它仍然是您可以获得的最微小的速度增益.您可以花时间在仪器中分析应用程序并将其告诉您并在您自己的代码中解决热点问题.
这就是基金会变得更快的地方:你的时间.
在可行的情况下使用Foundation的自动释放功能的代码可以避免容易避免的内存泄漏(即忘记写入或无法访问release
消息),从而为您节省大量时间和麻烦.CF不具备自动释放,所以你必须记得显示CFRelease
你创造一切或与它和复制,当您忘记或无法达到的代码(我的意思是,当 -I的经验之谈),你会花更多的时间追捕内存泄漏.静态分析仪有所帮助,但它永远无法捕捉到一切.
(从技术上讲,你可以自动释放CF对象,但这样做的代码非常难看,而你只是在减少已经微不足道的速度增益.)
所以,尽可能坚持基金会.不要过分自动释放; 即使在纯Cocoa中,仍然有时候明确释放对象是有保证的(大多数是紧密的循环),而且这对于Cocoa Touch来说是双倍的(因为如果你分配太多的内存,iOS会杀死你的应用程序,所以你要发布大的像图像一样的对象尽快).但通常情况下,autorelease会比CF节省用户更多的时间.
非时间相关的原因是Objective-C代码与参数名称(来自消息选择器)混合在一起,比基于C函数的代码更容易阅读.这可能不会让你的工作更快,但它肯定会让它变得更有趣.
使用CF函数编写代码确实可以提高应用程序的性能,但是还有另一种更好的方法可以提高性能:直接用汇编编写将带来更多的性能优势(尽管这是一种极端的方法)。
至少由于Peter Hosey提到的原因,高级语言结构优于低级语言结构。为此,我们可以添加过早的优化,这很容易导致项目失败,因为开发人员更加关注应用程序的非功能性方面,而不是功能性方面。
如果在拥有功能全面的应用程序之后,您认为代码的某些部分存在性能瓶颈,则可以尝试通过将它们重写为低级语言构造来优化这些瓶颈。您至少要与当前代码进行比较,以确保低级代码的行为符合预期(手动或单元测试都可以解决问题)。
归档时间: |
|
查看次数: |
10444 次 |
最近记录: |