iOSInterviewQuestions icon indicating copy to clipboard operation
iOSInterviewQuestions copied to clipboard

关于第 34 题关于 NSOperation 中需要手动添加 Autorelease Pool 的部分的疑问

Open skyline75489 opened this issue 9 years ago • 4 comments

SO 上的这个答案 https://stackoverflow.com/questions/24562043/is-autoreleasepool-still-required-for-modern-ios-8-nsoperation-usage 提到,系统会自动设置好 Autorelease Pool。

这个答案 https://stackoverflow.com/questions/184409/nsautoreleasepool-in-nsoperation-main 提到说需要手动加入 Autorelease Pool,但是答案本身是 08 年的,所引用的苹果官方文档应该也已经更新了(搜不到对应的内容)。

按照我自己的理解,应该是不需要的,因为 NSOperation 所跑的线程也是 Cocoa 创建的线程,Cocoa 创建的线程中应该就已经设置好 Autorelease Pool 了。

按照文档的说法,Operation 里的 Pool 不一定什么时候会进行 drain,所以添加自己的 Pool 会更利于管理。

skyline75489 avatar Nov 13 '15 12:11 skyline75489

关于你提到的:

Cocoa 创建的线程中应该就已经设置好 Autorelease Pool 了。

子线程中的 Autorelease Pool 不会工作,需要手动开启。因为子线程的runloop默认不工作。

ChenYilong avatar Nov 28 '15 00:11 ChenYilong

Pool 的工作依赖于 runloop 这一点我倒是没想到,如何手动开启 pool 呢?就是自己再添加一个吗?

skyline75489 avatar Nov 28 '15 00:11 skyline75489

@ChenYilong 子线程 runloop默认不工作和 autoreleasePool 不会工作这个是哪里的文档?

liuxuan30 avatar Nov 28 '15 01:11 liuxuan30

到底需不要加autoreleasepool?

michaeldong avatar Apr 20 '16 03:04 michaeldong