V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
keakon
V2EX  ›  iDev

奇葩的问题:开启ARC后,返回对象的方法会变慢几十倍

  •  
  •   keakon ·
    keakon · 2011-11-29 23:44:15 +08:00 · 6252 次点击
    这是一个创建于 4532 天前的主题,其中的信息可能已经有所发展或是发生改变。
    测试平台是Mac OS X 10.7.2,其实iOS上也是类似的。

    这是测试类:
    @interface Test : NSObject
    - (id)nothing;
    @end

    @implementation Test
    - (id)nothing {
    return self;
    }
    @end

    然后创建一个对象,执行1千万次它的nothing方法:
    Test *test = [[Test alloc] init];
    time_t c = clock();
    for (int i = 0; i < 10000000; ++i) {
    [test nothing];
    }
    NSLog(@"%f", (clock() - c) / (double)CLOCKS_PER_SEC);

    未开启ARC时约0.041秒,开启后约0.698秒。如果还有赋值操作的话,这个差别就更大了…

    接着把返回值改为nil,未开启ARC时约0.041秒,开启后约0.105秒。

    再把返回值类型改成void、int或int *等非id类型,这下都变成0.040秒了。

    于是怀疑编译器自动对返回值执行了retain/release操作,但是不清楚怎么避免。不知道有人研究过么?
    4 条回复    1970-01-01 08:00:00 +08:00
    Echoldman
        1
    Echoldman  
       2011-11-29 23:54:30 +08:00
    一直没有用arc,关注
    nickcheng
        2
    nickcheng  
       2012-01-16 16:10:12 +08:00
    这个事情有后续的研究么?
    popoer
        3
    popoer  
       2012-01-16 18:14:43 +08:00
    楼主出来说说哇
    guoxx_
        4
    guoxx_  
       2012-01-16 18:58:27 +08:00
    我本机测试环境先开启arc更快一些 llvm3.0

    试试这个?
    - (__weak id)nothing {
    return self;
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1307 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:59 · PVG 01:59 · LAX 10:59 · JFK 13:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.