【问题标题】:Custom NSOperations autorelease pool自定义 NSOperations 自动释放池
【发布时间】:2012-09-25 17:20:45
【问题描述】:

我已经实现了NSOperation 的一些自定义子类以在队列中使用。

我应该(或可以)在哪里设置@autoreleasepool

在我的自定义操作的main 方法中?

或者围绕我将操作添加到队列实例的语句?

编辑:

如果我使用块添加操作怎么办? @autoreleasepool 也应该进入街区吗?

如果相关,我正在使用 ARC。

【问题讨论】:

    标签: ios nsoperation nsautoreleasepool


    【解决方案1】:

    使用自动释放池的主要原因是防止临时不需要的对象大量聚集。例如,假设您的操作打开一堆图像,提取其中的一些片段(保存在 NSData 对象中),然后作为最后一步将新片段转换为图像。

    在这种情况下,我会做的是将打开和提取部分放在自动释放池中(确保 NSData 对象被正确保留),然后在创建和保存新图像之前退出它。这样一来,所有打开的图像都肯定会被释放。

    据我所知,通常没有理由在操作中使用自动释放池,因为一旦操作完成,队列最像在当时或之后不久进行。

    事实上,使用 ARC,编译器有时会将对象从自动释放池中拉出,然后保留,然后在不需要时直接释放它们。

    除非您已知迫切需要游泳池,否则我不会使用游泳池。现在,如果您使用带有 'start' 方法的并发 NSOperation,那就另当别论了,您应该使用池将代码包装在 runloop 周围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 2013-04-18
      • 2014-09-02
      • 2011-08-04
      • 2021-10-28
      • 1970-01-01
      相关资源
      最近更新 更多