怎样保证子线程数据回来更新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,同时发生从用户态到内核态的切换,然后当前线程处于休眠状态,做到有事做事,没事休息。
网友评论