我正在阅读“核心动画编程指南”,在“交易”一章中,我看到了这个
重要提示:从不支持的线程修改图层属性时 有一个runloop,你必须使用显式事务。
但是来自Apple的documentation on NSRunLoop
您的应用程序无法创建或显式管理NSRunLoop 对象。每个NSThread对象,包括应用程序的主要对象 thread,有一个为它自动创建的NSRunLoop对象 需要的。
这不是说每个线程都有一个runloop吗?或者不是由NSThread创建的线程,例如POSIX的pthread
答案 0 :(得分:8)
它说“每个NSThread
对象,包括应用程序的主线程,都会根据需要自动为其创建一个NSRunLoop
对象。”
如果您没有尝试访问线程的运行循环,系统将不会为该线程创建一个运行循环。
如果你没有[[NSRunLoop currentRunLoop] run]
(或类似的东西),你的线程就不会运行它的运行循环。
UIApplicationMain
函数负责处理主线程。对于您创建的线程,如果希望线程的运行循环有效,则需要运行线程的运行循环。
以下是Core Animation的情况(我认为),当您不使用显式事务时。它开始一个事务,并在当前线程的运行循环中注册一个回调来提交它。 (如果需要,这将为当前线程创建一个运行循环。)如果你没有运行线程的运行循环,那么永远不会调用该回调。