美文网首页
thread中runloop未开启,autorelease对象何

thread中runloop未开启,autorelease对象何

作者: dacheng | 来源:发表于2016-08-05 16:36 被阅读71次

    首先明确一点,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,自己创建一个才是正确的选择。

    欢迎指正!

    相关文章

      网友评论

          本文标题:thread中runloop未开启,autorelease对象何

          本文链接:https://www.haomeiwen.com/subject/uewcsttx.html