nstime 與runloop的關係

2021-06-26 07:43:45 字數 1584 閱讀 5500

每個run loop可執行在不同的模式下,乙個run loop mode是乙個集合,其中包含其監聽的若干輸入事件源,定時器,以及在事件發生時需要通知的run loop observers。執行在一種mode下的run loop只會處理其run loop mode中包含的輸入源事件,定時器事件,以及通知run loop mode中包含的observers。

cocoa中的預定義模式有:

connection模式

定義:nsconnectionreplymode(cocoa)

描述:處理nsconnection物件相關事件,系統內部使用,使用者基本不會使用。

modal模式

定義:nsmodalpanelrunloopmode(cocoa)

描述:處理modal panels事件。

獲取當前執行緒的run loop mode

nsstring* runloopmode = [[nsrunloop currentrunloop] currentmode];

nstimer與nsurlconnection預設執行在default mode下,這樣當使用者在拖動uitableview處於uitrackingrunloopmode模式時,nstimer不能fire,nsurlconnection的資料也無法處理。

nstimer的例子:

在乙個uitableviewcontroller中啟動乙個0.2s的迴圈定時器,在定時器到期時更新乙個計數器,並顯示在label上。

-(void)viewdidload

- (void)incrementcounter:(nstimer *)thetimer

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

另外一種是放到nsthread中

[objc]view plain

copy

- (void

)viewdidload  

- (void

)newthread  

}  - (void

)timer_callback  

nsurlrequest *request = [[nsurlrequest alloc] initwithurl:url cachepolicy:nsurlrequestreloadignoringlocalcachedata timeoutinterval:15];

nsurlconnection *connection = [[[nsurlconnection alloc] initwithrequest:request delegate:self startimmediately:no]autorelease];

[connection scheduleinrunloop:[nsrunloop currentrunloop] formode:nsrunloopcommonmodes];

[connection start];

RunLoop的知識小記

runloop字面上的意思是,執行迴圈 其基本作用 保持程式的持續執行 節省cpu資源,提高程式效能 該做事時做事,該休息時休息 1.main函式中的runloop int main int argc,char ar nsrunloop 是基於cfrunloopref的一層oc包裝,所以了解runl...

runLoop和runtime的分析

一.runloop runloop是事件接收和分發機制的乙個實現。runloop提供了一種非同步執行 的機制,不能並行執行任務。在主佇列中,main runloop直接配合任務的執行,負責處理ui事件 定時器以及其他核心相關事件。1 runloop的主要目的 保證程式執行的執行緒不會被系統終止。2 ...

關於run loop的幾點說明

1.3.1 cocoa中的nsrunloop類並不是執行緒安全的 我們不能再乙個執行緒中去操作另外乙個執行緒的run loop物件,那很可能會造成意想不到的後果。不過幸運的是corefundation中的不透明類cfrunloopref是執行緒安全的,而且兩種型別的run loop完全可以混合使用。...