runloop從字面意思來看是運行循環的意思。
一、RunLoop的基本作用:1.保持程序持續運行
2.處理App的各種事件(比如觸摸事件、定時器事件、selector事件)
3.節省CPU資源,提高程序性能
RunLoop與線程的關係:1每一個線程都有唯一的與之對應RunLoop對象
2.主線程的RunLoop已經自動創建好,子線程的RunLoop需要自己手動創建
3.RunLoop在第一次獲取時創建,在線程結束 時銷燬
三、獲取RunLoop對象:
1.獲取當前的RunLoop:
//1.獲取當前線程對應的RunLoop
NSRunLoop * currentLoop = [NSRunLoop currentRunLoop];
NSLog(@"當前線程對應的RunLoop:%@",currentLoop);
2.獲取主線程的RunLoop:[NSRunLoop mainRunLoop];
四、RunLoop相關的類:Core Foundation 中關於RunLoop有5個相關的類
CFRunLoopRef
CFRunLoopModeRef :RunLoop的運行模式,一個RunLoop包含若干個Mode,每個Mode又包含若干個Source/Timer/Observer
每次RunLoop啓動時,只能指定其中一個Mode,這個Mode被稱作爲CurrentMode
如果需要切換Mode,只能退出Loop,再重新指定一個Mode進入
系統默認註冊了5個Mode: kCFRunLoopDefaultMode(App的默認Mode,通常主線程是在這個Mode下運行)、UITrackingRunLoopMode(界面追蹤的Mode,用於UIScrollView追蹤觸摸滑動,保證界面滑動時不受其他Mode的影響)、UIInitializationRunLoopMode(在App剛啓動時進入的第一個Mode,啓動完成後就不再使用)、GSEventReceiveRunLoopMode(接受系統事件的內部Mode,通常不用)、kCFRunLoopCommonMode(是一個佔位用的Mode,不是一種真正的Mode)
CFRunLoopSourceRef CFRunLoopTimerRef CFRunLoopObserverRef