Runloop与多线程


Runloop与多线程_第1张图片

怎样保证子线程数据回来更新UI的时候不打断用户的滑动操作?

  用户滑动操作时runloop是运行在kCFRunLoopUITrackingMode下,网络请求一般放在子线程中,子线程返回给主线程的数据要抛回给主线程进行UI更新,把这部分的逻辑包装起来提交到主线程defaultMode下,这样进行mode隔离就避免了问题。

如何实现一个常驻线程:

1)创建一个runoop。

2)给runloop添加source/timer/observer事件以及port。

3)调用run方法。

注意:

运行的模式和资源添加的模式必须是同一个,否则可能由于外部使用while循环会导致死循环。

runLoop与线程是怎样的关系?

1)两者一一对应的关系

2)一个线程默认是没有runloop,需要手动加上runloop。

RunLoop面试总结:

什么是runloop,它是怎样做到有事做事,没事休息的?

1)runloop是一个事件循环用于处理事件消息和对他们的管理的对象。

2)在调用CFRunLoopRun方法中,会调用系统方法mach_msg,同时发生从用户态到内核态的切换,然后当前线程处于休眠状态,做到有事做事,没事休息。

你可能感兴趣的:(Runloop与多线程)