iOS RunLoop簡介

一、什麼是RunLoop?

RunLoop是運行循環,每個Cocoa應用程序都由一個處於阻塞狀態的do/while循環驅動,當有事件發生時,就把事件分派給合適的監聽器,如此反覆直到循環停止。處理分派的對象就叫做“運行循環”。

基本作用:1、保持程序的持續運行。

2、處理App中的各種事件(比如觸摸事件、定時器事件、Selector事件)。

3、節省CPU資源,提高程序性能:該做事時做事,該休息時休息。

二、RunLoop的基礎

每條線程都有唯一的一個與之對應的RunLoop對象
主線程的RunLoop已經自動創建好了,子線程的RunLoop需要主動創建
RunLoop在第一次獲取時創建,在線程結束時銷燬。

2.1獲得RunLoop對象

1、Foundation

[NSRunLoop currentRunLoop]; // 獲得當前線程的RunLoop對象
[NSRunLoop mainRunLoop]; // 獲得主線程的RunLoop對象

2、Core Foundation

CFRunLoopGetCurrent(); // 獲得當前線程的RunLoop對象
CFRunLoopGetMain(); // 獲得主線程的RunLoop對象

2.2 Core Foundation中關於RunLoop的5個類

CFRunLoopRef、CFRunLoopModeRef、CFRunLoopSourceRef、CFRunLoopTimerRef、CFRunLoopObserverRef

2.2.1 CFRunLoopModeRef代表RunLoop的運行模式

一個 RunLoop 包含若干個 Mode,每個Mode又包含若干個Source/Timer/Observer
每次RunLoop啓動時,只能指定其中一個 Mode,這個Mode被稱作 CurrentMode
如果需要切換Mode,只能退出Loop,再重新指定一個Mode進入
這樣做主要是爲了分隔開不同組的Source/Timer/Observer,讓其互不影響

系統默認註冊了5個Mode:

kCFRunLoopDefaultMode:App的默認Mode,通常主線程是在這個Mode下運行

UITrackingRunLoopMode:界面跟蹤 Mode,用於 ScrollView 追蹤觸摸滑動,保證界面滑動時不受其他 Mode 影響

UIInitializationRunLoopMode: 在剛啓動 App 時第進入的第一個 Mode,啓動完成後就不再使用

GSEventReceiveRunLoopMode: 接受系統事件的內部 Mode,通常用不到

kCFRunLoopCommonModes: 這是一個佔位用的Mode,不是一種真正的Mode


參考鏈接 :http://www.cnblogs.com/jukaiit/p/5574621.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章