线程

Texture是对资源的高效利用来给用户提供高帧速的体验。换言之,科学的在线程间分配工作,使默认的runLoop保持精简,实时允许用户的输入事件,并且消耗主队列上安排的工作

遵循以下规定:

  1. 使用UIKit API必须通过dispatch_get_main_queue()或者使用ASPerformBlockOnMainThread()在主线程执行
  2. 一般来说 其它任何事情都应该在后台发生

Run Loop、Threads and Queues

ASMainSerialQueue

ASMainSerialQueue确保在不中断的情况下在主线程执行工作,其主要区别是,使用dispatch_async(dispatch_get_main_queue, block)会在块的执行之间中断。
因此接口将在主线程中的队列中执行所有可能操作,然后再将控制权转移给OS

此接口会调用ASPerformBlockOnMainThread。当其他线程pop block在主线程执行时,该接口就会锁定其他线程,确保其在主调度队列和runloop的其它循环之前

并且由于是同步机制,ASMainSerialQueue是串行的,因此可以确保按照顺序执行。一个示例是将以下块排队: 更改视图属性->触发布局更新->动画。 由于ASMainSerialQueue可能会较早执行,因此要比使用dispatch_async(dispatch_get_main_queue())发送的块较早执行。

这实际上只是主调度队列的缓冲区,为计划工作提供了更多可见性。该接口确保计划的所有内容都将在主线程以同一操作顺兴进行

ASRunLoopQueue

Locks and Safety

线程竞争