什么东西异步运行是否意味着它不在主线程上?

adi*_*dit 1 iphone objective-c ipad ios

我对异步加载和主线程的概念有点困惑.当异步加载某些东西时,它是否意味着它不在主线程上运行?据我所知这是两个不同的概念,可以在主线程上异步运行某些东西,也可以异步在后台/辅助线程上运行.如果我错了,请纠正我.

Cat*_*Man 6

不完全的.异步运行意味着它不会停止执行继续当前线程.这是一个重要的区别,因为完全可以异步执行某些操作,使其最终出现在主线程上(例如:dispatch_async(dispatch_get_main_queue(),^ {some block});),这意味着它不会阻止其他一些线程从继续,但阻止主线程.

因为主线程对应用程序非常重要,所以异步代码的最常见用法是避免阻塞它,但它并不是唯一的用途.

(编辑添加)

或许,从"与x相关的异步"的角度来考虑它更有用.如果你这样做,例如:

dispatch_async(aSerialQueue, ^{
    work();
    work();
});
Run Code Online (Sandbox Code Playgroud)

然后,两个工作调用相互同步,并且与aSerialQueue上的所有其他工作同步,但是对于其他所有工作都是异步的.