4

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

重要提示:当从没有运行循环的线程修改层属性时,您必须使用显式事务。

但来自 Apple关于 NSRunLoop 的文档

您的应用程序不能创建或显式管理 NSRunLoop 对象。每个 NSThread 对象,包括应用程序的主线程,都有一个根据需要自动为其创建的 NSRunLoop 对象。

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

4

1 回答 1

9

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

如果您不做任何尝试访问线程的运行循环的操作,系统将不会为该线程创建运行循环。

如果你不这样做[[NSRunLoop currentRunLoop] run](或类似的东西),你的线程将不会运行它的运行循环。

UIApplicationMain函数为主线程处理这个问题。对于您创建的线程,如果您希望线程的运行循环有任何效果,则需要运行线程的运行循环。

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

于 2013-01-04T06:44:56.790 回答