关于RunLoop的几点个人看法

苹果官方资料:
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html

什么是RunLoop

runloop说白了就是一个循环机制,它能够帮你处理好触摸事件,定时事件等input source以及timer source周期循环的事情,当有事情发生时,runloop接收处理,没有就休眠(当到了规定的时间之后则消亡)。
无限简化版的runloop内部实现伪代码:
while (AppIsRunning) {
//睡眠状态,等待唤醒事件
id whoWakesMe = SleepForWakingUp();
//得到唤醒事件
id event = GetEvent(whoWakesMe);
//开始处理事件
HandleEvent(event);
}

runloop实际上做的比这上面的要多的多,至少还包括了休眠这样一步节省内部资源消耗的做法。

RunLoop如何使用

首先应该将Runloop看做是一个循环机制的封装,你使用了他以后,他会在底层将设定的输入源,对应的处理事件放到一个循环机制里面(这些都不需要我们去实现),然后调用Runloop的run方法或者runUntilDate方法。就可以完成你要做的周期性性质的事件(让对应的线程根本停不下来)。以下是官方建议的使用情况:

  • Use ports or custom input sources to communicate with other threads.
  • Use timers on the thread.
  • Use any of the performSelector… methods in a Cocoa application.
  • Keep the thread around to perform periodic tasks.

当你的线程是需要完成以上这些事情的时候可以使用runloop来解决问题以及优化性能。

runloop的使用案例

请参考网址:
http://www.cnblogs.com/zy1987/p/4582466.html

你可能感兴趣的:(ios,runloop)