关于 objective c 的问题求教 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
wohenyingyu01
V2EX    程序员

关于 objective c 的问题求教

  •  
  •   wohenyingyu01 2016-04-12 10:17:57 +08:00 3850 次点击
    这是一个创建于 3470 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在没有开 arc 的类里面写代码,新对象到底什么情况下才需要释放?比如

    NSString *something=@"something";

    NSDate *now=[NSDate date];

    NSString *string=[NSString stringWithFormat:@"xxxx"];

    NSData *data=[string dataUsingEncoding:NSUTF8StringEncoding];

    这些对象需要我用完手动 release 吗?貌似是编译时对象不需要手动 release ?
    22 条回复    2016-04-13 14:50:16 +08:00
    zhangchioulin
        1
    zhangchioulin  
       2016-04-12 10:23:25 +08:00
    看到 alloc new 再释放
    wohenyingyu01
        2
    wohenyingyu01  
    OP
       2016-04-12 10:35:29 +08:00
    @zhangchioulin 我调用了一个带 arc 的类,类的创建方法名字里面不带 init ,但是我点进去看它就是 alloc init 了一个对象返回给我,我在不带 arc 的类里面获取到了这个对象,此时我需要 release 吗?
    noif
        3
    noif  
       2016-04-12 10:47:23 +08:00
    你主动 alloc new copy 的 release ,其它不用管
    noif
        4
    noif  
       2016-04-12 10:48:14 +08:00
    rerurn 一次 release 一次
    noif
        5
    noif  
       2016-04-12 10:49:31 +08:00
    建议去看下 引用计数机制 你就什么都懂了
    wohenyingyu01
        6
    wohenyingyu01  
    OP
       2016-04-12 11:14:41 +08:00
    @noif 好的吧,主要现在是 arc 和非 arc 代码混用,比较乱,在 arc 里面 alloc 传到非 arc 代码里的对象,应该也会自动 release 吧,因为没有在非 arc 代码里 retain ?
    lee0100317
        7
    lee0100317  
       2016-04-12 12:09:48 +08:00   1
    @wohenyingyu01 arc 里面的函数返回的类会自动添加 autorelease 。 mrc 代码里面只需要关注调用的函数是否包含 init copy 等关键字是否存在来判断计数值。
    weithl
        8
    weithl  
       2016-04-12 13:36:50 +08:00
    cmd+shift+i 跑一下,看到蓝色的就有问题了
    wohenyingyu01
        9
    wohenyingyu01  
    OP
       2016-04-12 13:47:38 +08:00
    @lee0100317 好的谢啦
    zymmm3
        10
    zymmm3  
       2016-04-12 14:08:42 +08:00
    如果有源代码,就把它自动转化为 arc
    LINAICAI
        11
    LINAICAI  
       2016-04-12 14:18:27 +08:00
    有 alloc 的才需要 release
    cheng4741
        12
    cheng4741  
       2016-04-12 14:23:28 +08:00
    你不用点进去看它是否调用 alloc init ,谁 alloc 了谁去释放。大家都遵守这个原则就行。
    wohenyingyu01
        13
    wohenyingyu01  
    OP
       2016-04-12 16:20:37 +08:00
    @zymmm3 有代码,量大,几十万行全是不带 arc 的,有风险不……
    zymmm3
        14
    zymmm3  
       2016-04-12 17:11:58 +08:00
    @wohenyingyu01 比用人脑想风险低。
    wohenyingyu01
        15
    wohenyingyu01  
    OP
       2016-04-12 18:06:28 +08:00
    @zymmm3 万一转失败我岂不是背锅了
    hyzjshwo
        16
    hyzjshwo  
       2016-04-12 18:47:09 +08:00
    arc 和 mrc 上面的代码不都不需要 release ,如果是 nsthread 子线程调用,需要加上 autoreleasepool 。上面的代码会在 funcation 结束的时候回收 autorelease 对象。
    frederick036
        17
    frederick036  
       2016-04-12 18:54:02 +08:00
    这些例子全都不需要手动释放。
    zymmm3
        18
    zymmm3  
       2016-04-12 19:07:59 +08:00
    ylovesy
        19
    ylovesy  
       2016-04-12 22:10:37 +08:00
    这些都有 autorelease 管理,不需要手动释放
    noif
        20
    noif  
       2016-04-13 10:42:12 +08:00
    @wohenyingyu01 建议有时间还是全部替换成 arc 吧 一劳永逸
    wohenyingyu01
        21
    wohenyingyu01  
    OP
       2016-04-13 11:31:56 +08:00
    @hyzjshwo 子线程调用会自动 retain 吗?应该要加上__block 声明的变量才会吧?没有__block 应该不需要 autoreleasepool
    hyzjshwo
        22
    hyzjshwo  
       2016-04-13 14:50:16 +08:00
    @wohenyingyu01 不会调用 retain ,老的 mrc 中 nsthread 会有 leaks ,需要套上 autoreleasepool 。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     954 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 23:00 PVG 07:00 LAX 16:00 JFK 19:00
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86