首先明确一点,autorelease对象的释放,跟runloop没有本质的关系,只跟当前所处的autorelease pool有关。
每个线程默认拥有一个runloop,除主线程外,线程的runloop默认未开启。
每个runloop默认拥有一个autorelease pool。
线程开启runloop的情况下,runloop循环中的autorelease对象将在runloop的autorelease pool结束时被释放。
要将一个函数加入到某个线程的runloop中,可以通过performselector onthread,AddSource,AddTimer等方法将函数加入到线程的runloop中,当然函数中的autorelease对象也被加入到runloop对应的autorelease pool中。
线程函数自身的autorelease对象,如果没有加入到线程的runloop中,那就跟线程的runloop自带的autorelease pool没有任何关系了。
runloop 休眠前或者结束前,均会释放旧池创建新池。池中的autorelease对象也将被释放。
子线程中是否拥有一个隐藏的autorelease pool,并没有明确的官方文档说明。但是官方文档明确指出:creating an autorelease pool should be the first thing you do in your thread entry routine. (Threading Programming Guide)
所以不要猜测thread自身是否拥有一个autorelease pool,自己创建一个才是正确的选择。
欢迎指正!