runloop總結(jié)

runloop工作主要原理和總結(jié):

- 初始化UIApplication單例對象

? - 初始化AppDelegate對象,并設為UIApplication對象的代理

? - 檢查Info.plist設置的xib文件是否有效,如果有則解凍Nib文件并設置outlets,創(chuàng)建顯示key window、rootViewController、與rootViewController關聯(lián)的根view(沒有關聯(lián)則看rootViewController同名的xib),否則launch之后由程序員手動加載。

? - 建立一個主事件循環(huán),其中包含UIApplication的Runloop來開始處理事件。

- 初始化UIApplication單例對象

? - 初始化AppDelegate對象,并設為UIApplication對象的代理

? - 檢查Info.plist設置的xib文件是否有效,如果有則解凍Nib文件并設置outlets,創(chuàng)建顯示key window、rootViewController、與rootViewController關聯(lián)的根view(沒有關聯(lián)則看rootViewController同名的xib),否則launch之后由程序員手動加載。

? - 建立一個主事件循環(huán),其中包含UIApplication的Runloop來開始處理事件。


UIApplication:

1、通過window管理視圖;

2、發(fā)送Runloop封裝好的control消息給target;

3、處理URL,應用圖標警告,聯(lián)網(wǎng)狀態(tài),狀態(tài)欄,遠程事件等。

AppDelegate:

管理UIApplication生命周期和應用的五種狀態(tài)(notRunning/inactive/active/background/suspend)。

Key Window:

1、顯示view;

2、管理rootViewcontroller生命周期;

3、發(fā)送UIApplication傳來的事件消息給view。

rootViewController:

1、管理view(view生命周期;view的數(shù)據(jù)源/代理;view與superView之間事件響應nextResponder的“備胎”);

2、界面跳轉(zhuǎn)與傳值;

3、狀態(tài)欄,屏幕旋轉(zhuǎn)。

view:

1、通過作為CALayer的代理,管理layer的渲染(順序大概是先更新約束,再layout再display)和動畫(默認layer的屬性可動畫,view默認禁止,在UIView的block分類方法里才打開動畫)。layer是RGBA紋理,通過和mask位圖(含alpha屬性)關聯(lián)將合成后的layer紋理填充在像素點內(nèi),GPU每1/60秒將計算出的紋理display在像素點中。

2、布局子控件(屏幕旋轉(zhuǎn)或者子視圖布局變動時,view會重新布局)。

3、事件響應:event和guesture。

插播控制器生命周期

runloop:

1、(要讓馬兒跑)通過do-while死循環(huán)讓程序持續(xù)運行:接收用戶輸入,調(diào)度處理事件時間。

2、(要讓馬兒少吃草)通過mach_msg()讓runloop沒事時進入trap狀態(tài),節(jié)省CPU資源。


1、與線程和自動釋放池相關:

2、CFRunLoopRef構(gòu)造:數(shù)據(jù)結(jié)構(gòu);創(chuàng)建與退出;mode切換和item依賴;Runloop啟動

? ? ? ? - CFRunLoopModeRef:數(shù)據(jù)結(jié)構(gòu)(與CFRunLoopRef放一起了);創(chuàng)建;類型;

? ? ? ? ? modeItems:- CFRunLoopSourceRef:數(shù)據(jù)結(jié)構(gòu)(source0/source1);

? ? ? ? ? ? ? ? ? ? ? ? ? ? - source0 :

? ? ? ? ? ? ? ? ? ? ? ? ? ? - source1 :

? ? ? ? ? ? ? ? ? ? ? - CFRunLoopTimerRef:數(shù)據(jù)結(jié)構(gòu);創(chuàng)建與生效;相關類型(GCD的timer與CADisplayLink)

? ? ? ? ? ? ? ? ? ? ? - CFRunLoopObserverRef:數(shù)據(jù)結(jié)構(gòu);創(chuàng)建與添加;監(jiān)聽的狀態(tài);

3、Runloop內(nèi)部邏輯:關鍵在兩個判斷點(是否睡覺,是否退出)

? ? ? ? - 代碼實現(xiàn):

? ? ? ? - 函數(shù)作用棧顯示:

4、Runloop本質(zhì):mach port和mach_msg()。

5、如何處理事件:

? ? ? ? - 界面刷新:

? ? ? ? - 手勢識別:

? ? ? ? - GCD任務:

? ? ? ? - timer:(與CADisplayLink)

? ? ? ? - 網(wǎng)絡請求:

6、應用:

? ? ? ? - 滑動與圖片刷新;

? ? ? ? - 常駐子線程,保持子線程一直處理事件

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • RunLoop介紹 RunLoop和線程有什么關系? 總的來說,RunLoop正如其名,loop表示某種循環(huán),和r...
    Resoluted閱讀 530評論 0 0
  • 一、概念 簡單點說Runloop就是一個do while的運行循環(huán)。主要的作用就是保持程序的持續(xù)運行。比如主線程的...
    boundlessocean閱讀 307評論 0 1
  • 面試經(jīng)常會被問到的一些問題: 1.講講 RunLoop,項目中有用到嗎? 2.RunLoop內(nèi)部實現(xiàn)邏輯? 3.R...
    __blossom閱讀 1,155評論 1 5
  • OC語言基礎 1.類與對象 類方法 OC的類方法只有2種:靜態(tài)方法和實例方法兩種 在OC中,只要方法聲明在@int...
    奇異果好補閱讀 4,523評論 0 11
  • 購買率高的小程序,都做到了這幾點 最近微信的動作不少,而且每一個都能在整個互聯(lián)網(wǎng)行業(yè)掀起一場風波。前幾天微信"服務...
    烯時代小烯閱讀 266評論 0 0

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