我已经实现了一些NSOperation
在队列中使用的自定义子类。
我应该(或可以)在哪里设置@autoreleasepool
?
在我的自定义操作main
方法中?
或者围绕我将操作添加到队列实例的语句?
编辑:
如果我使用块添加操作怎么办?也应该@autoreleasepool
进入街区吗?
如果相关,我正在使用 ARC。
我已经实现了一些NSOperation
在队列中使用的自定义子类。
我应该(或可以)在哪里设置@autoreleasepool
?
在我的自定义操作main
方法中?
或者围绕我将操作添加到队列实例的语句?
编辑:
如果我使用块添加操作怎么办?也应该@autoreleasepool
进入街区吗?
如果相关,我正在使用 ARC。
使用自动释放池的主要原因是防止临时不需要的对象的大量聚集。例如,假设您的操作打开一堆图像,提取其中的一些片段(保存在 NSData 对象中),然后作为最后一步将新片段转换为图像。
在这种情况下,我会做的是将打开和提取部分放在自动释放池中(确保正确保留 NSData 对象),然后在创建和保存新图像之前退出它。这样,所有打开的图像肯定会被释放。
我知道没有理由在操作中通常使用自动释放池,因为一旦操作完成队列最喜欢然后或之后不久。
事实上,使用 ARC,编译器有时会将对象从自动释放池中拉出,然后保留,然后在不需要时直接释放它们。
除非你有一个已知的迫切需要一个游泳池,否则我不会使用一个。现在,如果您使用带有“start”方法的并发 NSOperation,那就是另一回事了,您应该使用池将代码包装在 runloop 周围。