没有runloop的线程

时间:2013-01-04 06:23:35

标签: ios nsthread runloop

我正在阅读“核心动画编程指南”,在“交易”一章中,我看到了这个

  

重要提示:从不支持的线程修改图层属性时   有一个runloop,你必须使用显式事务。

但是来自Apple的documentation on NSRunLoop

  

您的应用程序无法创建或显式管理NSRunLoop   对象。每个NSThread对象,包括应用程序的主要对象   thread,有一个为它自动创建的NSRunLoop对象   需要的。

这不是说每个线程都有一个runloop吗?或者不是由NSThread创建的线程,例如POSIX的pthread

1 个答案:

答案 0 :(得分:8)

它说“每个NSThread对象,包括应用程序的主线程,都会根据需要自动为其创建一个NSRunLoop对象。”

如果您没有尝试访问线程的运行循环,系统将不会为该线程创建一个运行循环。

如果你没有[[NSRunLoop currentRunLoop] run](或类似的东西),你的线程就不会运行它的运行循环。

UIApplicationMain函数负责处理主线程。对于您创建的线程,如果希望线程的运行循环有效,则需要运行线程的运行循环。

以下是Core Animation的情况(我认为),当您不使用显式事务时。它开始一个事务,并在当前线程的运行循环中注册一个回调来提交它。 (如果需要,这将为当前线程创建一个运行循环。)如果你没有运行线程的运行循环,那么永远不会调用该回调。