面试题:讲讲RunLoop,项目中有用到吗?
保持程序的持续运行;
处理App中的各种事件(eg:触摸事件,定时器事件);
节省CPU资源,提高程序性能(该做事的时候做事,该休息的时候休息)。
应用范畴:定时器(Timer)、PerformSelector、GCD Async Main Queue、事件响应、手势识别、界面刷新、网络请求、AutoreleasePool。
面试题:runloop内部实现逻辑?
面试题:runloop和线程的关系?
一对一的关系。
面试题:timer与runloop的关系?
timer运行在runloop里面。
面试题:程序中添加每3秒响应一次的NSTimer,当拖动tableView时timer可能无法响应要怎么解决?
将mode改成kCFRunLoopCommonModes, 它默认包括kCFRunLoopDefaultMode和UITrackingRunLoopMode.
面试题:runloop是怎么响应用户操作的,具体流程是什么样的?
先由Source1捕捉触摸事件,再有Source0去处理事件。
通知Observers,进入Loop、即将Timers、Sources、blocks;
处理Source0;
如果存在Source1,通知观察者,结束休眠去处理source1,处理blocks;
根据前面处理的结果,决定如何操作。
面试题:说说runloop的几种状态?
kCFRunLoopEntry: 即将进入Loop
kCFRunLoopBeforeTimer: 即将处理Timer
kCFRunLoopBeforeSources: 即将处理Source
kCFRunLoopBeforeWaiting:即将进入休眠
kCFRunLoopAfterWaiting:刚从休眠中唤醒
kCFRunLoopExit:即将推出Loop
kCFRunLoopAllActivities:
RunLoop在实际开发中的应用:
控制线程生命周期(线程保活)、
解决NSTimer在滑动时停止工作的问题
监控应用卡顿
性能优化
网友评论