搜索

首页  >  问答  >  正文

objective-c - 既然设置了ARC,为什么还要使用@autoreleasepool

1、既然设置了ARC,为什么还需要@autoreleasepool,有什么好处?
池子做的是运行时延迟释放,ARC已经在编译时解决了手动管理的问题,那么就没必要使用@autoreleasepool,还占内存。
2、ARC频繁释放内存 和@autoreleasepool一起释放 感觉还是前者 要好些,
这不是像数据连接池一样可以共享资源。只是延迟释放内存(又不能共享内存)。

按着这个推论在ARC条件下,没必要使用@autoreleasepool。

我知道这种想法有问题,但是不知道是哪里,新手问题多,莫喷

巴扎黑巴扎黑2766 天前438

全部回复(2)我来回复

  • ringa_lee

    ringa_lee2017-04-24 09:12:51

    ARC 并不是舍弃了 @autoreleasepool,而是在编译阶段帮你插入必要的 retain/release/autorelease 的代码调用。

    所以,跟你想象的不一样,ARC 之下依然是延时释放的,依然是依赖于 NSAutoreleasePool,跟非 ARC 模式下手动调用那些函数本质上毫无差别,只是编译器来做会保证引用计数的正确性。

    参考:

    • Retain count semantics in ARC
    • What's @autoreleasepool

    回复
    0
  • 迷茫

    迷茫2017-04-24 09:12:51

    用@autoreleasepool是有用的。
    正常情况下,你创建的变量会在超出其作用域的时候被释放掉。
    而如果你的函数写的很长,在你函数运行过程中出现很多中间变量,占据了大量的内存,怎么办?
    用@autoreleasepool。
    在@autoreleasepool中创建的变量,会在@autoreleasepool结束的时候执行一次release,进行释放。其实@autoreleasepool就相当于一层作用域。

    回复
    0
  • 取消回复