一般来说,一个线程一次只能执行一个任务,执行完成后线程就会推出。如果我们需要一个机制,让线程随时处理事件但并不退出,通常用do {}while 来处理。
这种称之为Event loop,在Windows和node.js或者OSX/IOS里面都可以看到,它的关键点是:如何管理事件与信息,如何让线程在没有处理消息和事件时休眠以避免资源占用、在有消息到来时立刻被唤醒。
所以,runloop实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行上面的Event Loop逻辑。线程执行了这个函数后,就会一直处于这个函数内部“接受消息——>等待——>处理”的循环中,直到传入quit消息,函数返回!
iOS中提供了两个对象:NSRunLoop和CFRunLoopRef
线程和runloop之间是一一对应的,其关系是保存在一个全局的dictionary里。线程刚创建时并没有RunLoop,如果你不主动获取,那它一直都不会有,
从iOS5推出ARC开始,我们就不用MRC了!
END.