繁体   English   中英

自定义NSOperations自动释放池

[英]Custom NSOperations autorelease pool

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

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

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

还是在将操作添加到队列实例的语句周围?

编辑:

如果我要添加带有块的操作怎么办? @autoreleasepool是否也应该@autoreleasepool块中?

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM