1

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

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

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

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

编辑:

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

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

4

1 回答 1

0

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

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

我知道没有理由在操作中通常使用自动释放池,因为一旦操作完成队列最喜欢然后或之后不久。

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

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

于 2012-09-25T17:43:34.697 回答