这是我的ARC 与 MRC 性能测量 http://www.learn-cocos2d.com/2013/03/confirmed-arc-slow/。性能测试项目为可以在 github 上找到 https://github.com/LearnCocos2D/LearnCocos2D/tree/master/Cocos2D-ARC-Performance-Test这样您就可以添加自己的测试。只要确保在设备上运行它即可。模拟器中的结果存在偏差,并且通常有利于 MRC。
总结一下:
ARC和MRC一般速度相同。一般来说,代码在 ARC 下应该会更快,但紧密循环可能会更慢,而且速度明显更慢。
在低级测试中,由于优化(自动释放返回,@autoreleasepool),ARC 在速度方面优于 MRC。
在某些代码中,ARC 插入了额外的保留/释放,只要应用程序是单线程的,这些代码在 MRC 下并不是严格必需的。此类代码在 ARC 下可能会更慢,尽管它只会在紧密循环中产生影响,并且在很大程度上取决于相关代码。
例如,接收对象的方法即使在 MRC 下也应该保留它,因为在该方法运行时它可能会在多线程应用程序中被释放。事实上,您可以在 MRC 中省略该代码,这会使其速度更快,但本质上更不安全(尽管您很少会遇到这样的问题,OTOH,如果您希望没有的话)。例子:
-(void) someMethod:(id)object
{
[object retain]; // inserted by ARC, good practice under MRC
[object doSomething];
[object doAnotherThing];
[object release]; // inserted by ARC, good practice under MRC
}
我在测试项目中使用的遗传算法是使用 ARC 大约慢 40%因为这。这是一个糟糕(极端)的例子,因为对于这种算法,由于 NSMutableArray 和 NSNumber 对象上创建的大量插入/删除操作,您应该通过用 C 重写关键代码部分来看到更大的性能改进。
完全忽视 ARC 是彻头彻尾的疏忽,因为它can慢一点在某些情况下。如果您发现这些情况对性能至关重要,那么-fno-objc-arc
该代码或用 C 重写它。
不应因为性能考虑而考虑赞成或反对ARC。ARC 是一个让程序员的工作变得更加轻松的工具 https://stackoverflow.com/a/8760820/201863。由您来决定您是否喜欢浪费时间尝试查找泄漏的对象和悬空指针崩溃,以至于您宁愿坚持使用 MRC。