初步認(rèn)識(shí)RunLoop##
runloop提供了這樣一樣機(jī)制,讓線程在沒(méi)有處理消息和事件時(shí)休眠以免暫用資源蹲堂,在有消息或事件到來(lái)時(shí)立刻被喚醒深胳。
OSX/iOS系統(tǒng)中盏浙,提供了兩個(gè)對(duì)象:NSRunLoop和CFRunLoopRef.
- CFRunLoopRef是在CoreFoundation框架內(nèi)的融虽,它提供了純c函數(shù)的API,所有這些API都是線程安全的灼芭。
- NSRunLoop是基于CFRunLoopRef的封裝有额,提供了面向?qū)ο蟮腁PI,這些API不是線程安全的彼绷。
線程和RunLoop關(guān)系##
蘋果不容許直接創(chuàng)建RunLoop,只提供了兩個(gè)自動(dòng)獲取的函數(shù):
1.[NSRunLoop mainRunLoop];
2.[NSRunLoop currentRunLoop];
線程和RunLoop之間是一一對(duì)應(yīng)巍佑。線程剛創(chuàng)建的時(shí)候并沒(méi)有RunLoop,如果沒(méi)有主動(dòng)獲取寄悯,那它就一直沒(méi)有萤衰。RunLoop的創(chuàng)建發(fā)生在第一次獲取時(shí),當(dāng)線程銷毀的時(shí)候的RunLoop被銷毀猜旬,你只能在一個(gè)線程的內(nèi)部獲取其RunLoop(主線程除外)脆栋。
RunLoop類介紹##
在CoreFound中關(guān)于RunLoop有5個(gè)類:
1.CFRunLoopRef
2.CFRunLoopModeRef
3.CFRunLoopSourceRef
4.CFRunLoopTimerRef
5.CFRunLoopObserverRef
它們關(guān)系如下圖
: