runloop的原理笔记

一般来说,一个线程一次只能执行一个任务,执行完成后线程就会推出。如果我们需要一个机制,让线程随时处理事件但并不退出,通常用do {}while 来处理。

这种称之为Event loop,在Windows和node.js或者OSX/IOS里面都可以看到,它的关键点是:如何管理事件与信息,如何让线程在没有处理消息和事件时休眠以避免资源占用、在有消息到来时立刻被唤醒。

所以,runloop实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行上面的Event Loop逻辑。线程执行了这个函数后,就会一直处于这个函数内部“接受消息——>等待——>处理”的循环中,直到传入quit消息,函数返回!

iOS中提供了两个对象:NSRunLoop和CFRunLoopRef

线程和runloop之间是一一对应的,其关系是保存在一个全局的dictionary里。线程刚创建时并没有RunLoop,如果你不主动获取,那它一直都不会有,

从iOS5推出ARC开始,我们就不用MRC了!

END.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容