初步认识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
它们关系如下图
: