多執行緒篇 RunLoop

2021-07-11 12:11:52 字數 2307 閱讀 9258

簡述

1、runloop是事件接收和分發機制的乙個實現

3、以及節省cpu資源,提高程式效能:(該做事時做事,該休息時休息)

如何獲取runloop物件:

這裡的話ios提供了兩套api來訪問或使用runloop

1、cfrunloopref 是在 corefoundation 框架內的,它提供了純 c 函式的 api,所有這些 api 都是執行緒安全的。

2、nsrunloop 是基於 cfrunloopref 的封裝,提供了物件導向的 api,但是這些 api 不是執行緒安全的。

//具體顯示

int main(int argc, char * argv)

}

獲取的方式

//獲取的兩種方式

1、這種為cfrunloopref中的

cfrunloopgetcurrent(); // 獲得當前執行緒的runloop物件

cfrunloopgetmain(); // 獲得主線程的runloop物件

2、這種為nsrunloop中的

[nsrunloop currentrunloop]; // 獲得當前執行緒的runloop物件

[nsrunloop mainrunloop]; // 獲得主線程的runloop物件

相關類

//相關的五個類

1、cfrunloopref

1、代表乙個runloop物件

2、cfrunloopmoderef

1、代表runloop的執行模式

1、乙個runloop包含若干個mode,每個mode又包含若干個source/timer/observer

2、每次runloop啟動時,只能指定其中乙個 mode,如果需要切換mode,只能退出loop,再重新指定乙個mode進入

3、同一時刻只能進行一種模式

2、蘋果內部提供了五種模式

1、kcfrunloopdefaultmode (nsdefaultrunloopmode)

2、uitrackingrunloopmode

1、介面跟蹤 mode,用於 scrollview 追蹤觸控滑動,保證介面滑動時不受其他 mode 影響

//這個通常用不到

3、uiinitializationrunloopmode

//這個通常用不到

4、gseventreceiverunloopmode

1、接受系統事件的內部 mode

5、kcfrunloopcommonmodes

1、這是乙個佔位用的mode,這個的話用語言很難表達,後面會看到例項中會使用到這裡,大家仔細體會

3、cfrunloopsourceref

1、用來管理所有事件的事件源,包括自定義的事件,以及系統自帶的事件。

2、source有兩個版本:source0 和 source1

1、source0-----為使用者主動觸發的事件

2、source1-----通過核心和其他執行緒相互傳送訊息。

4、cfrunlooptimerref

1、基本上說的就是nstimer,基本用法如下例項標示

5、cfrunloopobserverref

1、用來監聽runloop的狀態改變

2、狀態列表

kcfrunloopentry = (1ul << 0), // 即將進入loop

kcfrunloopbeforetimers = (1ul << 1), // 即將處理 timer

kcfrunloopbeforesources = (1ul << 2), // 即將處理 source

kcfrunloopbeforewaiting = (1ul << 5), // 即將進入休眠

kcfrunloopafterwaiting = (1ul << 6), // 剛從休眠中喚醒

kcfrunloopexit = (1ul << 7), // 即將退出loop

kcfrunloopallactivities = 0x0fffffffu //所有狀態

補充

乙個 runloop 有很多 mode ,乙個 mode 裡面有很多得 source/timer/observer ,但是同一時刻只能進行一種模式。 如圖: 

例項

IOS 多執行緒 RUNLOOP 機制 二

二,何時使用run loop 對於輔助線程,在需要和執行緒有更多互動時,才使用run loop。比如 1 使用埠或者自定義輸入源來和其他執行緒通訊 2 使用執行緒定時器 3 cocoa中使用任何performselector.的方法 參考 table performing selectors on ...

多執行緒學習筆記4 RunLoop

基本作用 runloop處理邏輯 官方版 runloop物件 ios中有2套api來訪問和使用runloop core foundation nsrunloop和cfrunloopref都代表著runloop物件 nsrunloop是基於cfrunloopref的一層oc包裝,所以要了解runloo...

多執行緒 開張篇

提到執行緒第一反應其他概念程序,作業系統。執行緒就是幹活的人。多執行緒就是多個人幹活。執行緒可以分ui執行緒和工作執行緒。ui執行緒就是前台工作者,一般都是小姑娘。工作執行緒就是後台工人 幹些苦活累活的 前台吩咐後台幹活,後台幹完了要通知前台。這就是男女搭配,幹活不累。前台和後台共用乙個廁所。這時男...