RunLoop回憶錄

RunLoop回憶錄

簡介

運行循環(huán), 能夠保持程序運行, 處理app的各種事件, 節(jié)省CPU資源, 提高性能.

訪問方法

  • NSRunLoop
  • CFRunLoopRef

CFRunLoopRef是c語言寫的, 相比于NSRunLoop更加底層, 所以CFRunLoopRef的性能要更高一點.

RunLoop與線程

  • 每條線程都有唯一的與之對應(yīng)的RunLoop對象.
  • 主線程的RunLoop已經(jīng)創(chuàng)建好了, 而子線程的需要手動創(chuàng)建.
  • RunLoop在第一次獲取時創(chuàng)建, 在線程結(jié)束時銷毀.

獲取RunLoop對象

Foundation:

[NSRunLoop currentRunLoop]; // 獲取當(dāng)前線程的RunLoop對象
[NSRunLoop mainRunLoop]; // 獲取主線程的RunLoop對象

Core Foundation:

CFRunLoopGetCurrent();
CFRunLoopGetMain();

RunLoop相關(guān)類

  • CFRunLoopRef
  • CFRunLoopModeRef
  • CFRunLoopSourceRef
  • CFRunLoopTimerRef
  • CFRunLoopObserverRef
  1. 一個CFRunLoopModeRef代表的是RunLoop的運行模式
  2. 一個RunLoop包含若干個Mode, 每個Mode又包含若干個Source/Timer/Observer
  3. 每次調(diào)用RunLoop的主函數(shù)時, 只能指定其中一個Mode, 這個Mode被稱作CurrentMode
  4. 如果需要切換Mode, 只能退出RunLoop, 再重新指定一個Mode進(jìn)入, 這樣做是為了分隔開不同組的Source/Timer/Observer, 讓其互不影響

CFRunLoopModeRef

系統(tǒng)默認(rèn)注冊了4個mode

kCFRunLoopDefaultMode //App的默認(rèn)Mode,通常主線程是在這個Mode下運行
UITrackingRunLoopMode //界面跟蹤 Mode,用于 ScrollView 追蹤觸摸滑動,保證界面滑動時不受其他 Mode 影響    UIInitializationRunLoopMode // 在剛啟動 App 時第進(jìn)入的第一個 Mode,啟動完成后就不再使用
GSEventReceiveRunLoopMode // 接受系統(tǒng)事件的內(nèi)部 Mode,通常用不到
kCFRunLoopCommonModes //這是一個占位用的Mode,不是一種真正的Mode

CFRunLoopSourceRef

是事件源, 分為兩種:

  1. source0: 非基于port的(port相當(dāng)于是系統(tǒng)), 響應(yīng)
  2. source1: 基于port的, 系統(tǒng)提供的

CFRunLoopObserverRef

是觀察者, 可以監(jiān)聽RunLoop的狀態(tài)改變監(jiān)聽的

RunLoop的應(yīng)用

  1. performSelector
  2. 常駐線程
  3. NSTimer
  4. ImageVIew的顯示, 第三方框架SDWebImage利用了RunLoop
  5. 自動釋放池
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載:http://www.cocoachina.com/ios/20150601/11970.html RunL...
    Gatling閱讀 1,561評論 0 13
  • RunLoop 的概念 一般來講,一個線程一次只能執(zhí)行一個任務(wù),執(zhí)行完成后線程就會退出。如果我們需要一個機(jī)制,讓線...
    Mirsiter_魏閱讀 679評論 0 2
  • RunLoop的概念 一般來講,一個線程一次只能執(zhí)行一個任務(wù),執(zhí)行完成后線程就會退出。如果我們需要一個機(jī)制,讓線程...
    IOS學(xué)渣閱讀 500評論 1 4
  • http://www.cocoachina.com/ios/20150601/11970.html RunLoop...
    紫色冰雨閱讀 955評論 0 3
  • 近一段時間來,有關(guān)校園欺凌的報道頻頻見諸報端.,有的甚至觸犯刑法,這對建設(shè)和諧校園產(chǎn)生了嚴(yán)重影響。那么,家長如何教...
    教育雜談閱讀 646評論 0 0

友情鏈接更多精彩內(nèi)容