基本作用
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...