多執行緒學習筆記4 RunLoop

2021-08-07 20:43:45 字數 2098 閱讀 1794

基本作用

runloop處理邏輯-官方版

runloop物件

ios中有2套api來訪問和使用runloop

core foundation

nsrunloop和cfrunloopref都代表著runloop物件

nsrunloop是基於cfrunloopref的一層oc包裝,所以要了解runloop內部結構,需要多研究cfrunloopref層面的api(core foundation層面)

runloop資料

runloop與執行緒

每條執行緒都有唯一的乙個與之對應的runloop物件

主線程的runloop已經自動建立好了,子執行緒的runloop需要主動建立

獲得runloop物件

foundation

core foundation

runloop物件是用字典在儲存,key是執行緒,乙個執行緒對應乙個runloop

nstimer *timer = [nstimer timerwithtimeinterval:2.0 target:self selector:@selector(run:) userinfo:nil repeats:yes];  

//只執行在kcfrunloopdefaultmode模式下。一旦runloop進入其他模式,這個定時器就不會工作

// [[nsrunloop currentrunloop]addtimer:timer formode:nsdefaultrunloopmode];

//定時器會跑在標記為common modes的模式下

//標記為common modes的模式:kcfrunloopdefaultmode和uitrackingrunloopmode

[[nsrunloop currentrunloop ]addtimer:timer formode:nsrunloopcommonmodes];

nslog(@"%@",[nsrunloop currentrunloop]);

[nstimer scheduledtimerwithtimeinterval:2.0 target:self selector:@selector(run:) userinfo:nil repeats:yes];

//這句**,先加了乙個timer到default模式下的runloop中

按照函式呼叫棧,source的分類

runloop處理邏輯

typedef cf_options(cfoptionflags, cfrunloopactivity) ;
//建立observer

cfrunloopobserverref observe = cfrunloopobservercreatewithhandler(cfallocatorgetdefault(), kcfrunloopallactivities, yes, 0, ^(cfrunloopobserverref observer, cfrunloopactivity activity) );

//新增觀察者 監聽runloop的狀態

cfrunloopaddobserver(cfrunloopgetcurrent(), observe, kcfrunloopdefaultmode);

//釋放observer

cfrelease(observe);

可以開啟一條常駐執行緒,對行為進行監控

-(void)test27

-(void)run100

-(void)touchesbegan:(nsset*)touches withevent:(uievent *)event

// [nsthread exit];就可以退出執行緒

//或者呼叫removeport方法

待續待續待續待續

多執行緒篇 RunLoop

簡述 1 runloop是事件接收和分發機制的乙個實現 3 以及節省cpu資源,提高程式效能 該做事時做事,該休息時休息 如何獲取runloop物件 這裡的話ios提供了兩套api來訪問或使用runloop 1 cfrunloopref 是在 corefoundation 框架內的,它提供了純 c ...

IOS 多執行緒 RUNLOOP 機制 二

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

Java 多執行緒學習筆記 4 多執行緒共享資料

我們經常說某個變數是執行緒非安全的,某個變數是執行緒安全,這裡 是否安全 針對的是類的例項變數,如果是方法內部的私有變數,不會存在這個問題 package smaug.cloud.provider.thread.t7 created by naonao on 17 12 10.public clas...