RunLoop

初步认识RunLoop##

runloop提供了这样一样机制,让线程在没有处理消息和事件时休眠以免暂用资源,在有消息或事件到来时立刻被唤醒。

OSX/iOS系统中,提供了两个对象:NSRunLoop和CFRunLoopRef.

  • CFRunLoopRef是在CoreFoundation框架内的,它提供了纯c函数的API,所有这些API都是线程安全的。
  • NSRunLoop是基于CFRunLoopRef的封装,提供了面向对象的API,这些API不是线程安全的。

线程和RunLoop关系##

苹果不容许直接创建RunLoop,只提供了两个自动获取的函数:
1.[NSRunLoop mainRunLoop];
2.[NSRunLoop currentRunLoop];
线程和RunLoop之间是一一对应。线程刚创建的时候并没有RunLoop,如果没有主动获取,那它就一直没有。RunLoop的创建发生在第一次获取时,当线程销毁的时候的RunLoop被销毁,你只能在一个线程的内部获取其RunLoop(主线程除外)。

RunLoop类介绍##

在CoreFound中关于RunLoop有5个类:

1.CFRunLoopRef
2.CFRunLoopModeRef
3.CFRunLoopSourceRef
4.CFRunLoopTimerRef
5.CFRunLoopObserverRef

它们关系如下图


RunLoop_第1张图片
872766-3109350c5bada503.png

你可能感兴趣的:(RunLoop)