NSRunLoop詳解

參考文章鏈接

http://blog.ibireme.com/2015/05/18/runloop/

1.UITrackingRunLoopModes模式下,不會(huì)處理定時(shí)事件。所以再滾動(dòng)列表的時(shí)候,定時(shí)器會(huì)停止。

NSTimer*timer = [NSTimerscheduledTimerWithTimeInterval:1target:selfselector:@selector(test)userInfo:nilrepeats:YES];

//[[NSRunLoopcurrentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; ?//注釋掉這句定時(shí)器不響應(yīng)

}

-(void)test{NSLog(@"輸出你妹");}

2.系統(tǒng)默認(rèn)注冊(cè)了5個(gè)Mode:

1. kCFRunLoopDefaultMode: App的默認(rèn) Mode,通常主線程是在這個(gè) Mode 下運(yùn)行的。

2. UITrackingRunLoopMode: 界面跟蹤 Mode,用于 ScrollView 追蹤觸摸滑動(dòng),保證界面滑動(dòng)時(shí)不受其他 Mode 影響。

3. UIInitializationRunLoopMode: 在剛啟動(dòng) App 時(shí)第進(jìn)入的第一個(gè) Mode,啟動(dòng)完成后就不再使用。

4: GSEventReceiveRunLoopMode: 接受系統(tǒng)事件的內(nèi)部 Mode,通常用不到。

5: kCFRunLoopCommonModes: 這是一個(gè)占位的 Mode,沒有實(shí)際作用。


3.


這就是多線程與runloop的關(guān)系了,每一個(gè)線程都有一個(gè)與之關(guān)聯(lián)的RunLoop,而每一個(gè)RunLoop可能會(huì)有多個(gè)Mode。CPU會(huì)在多個(gè)線程間切換來執(zhí)行任務(wù),呈現(xiàn)出多個(gè)線程同時(shí)執(zhí)行的效果。執(zhí)行的任務(wù)其實(shí)就是RunLoop去各個(gè)Mode里執(zhí)行各個(gè)item。因?yàn)镽unLoop是獨(dú)立的兩個(gè),相互不會(huì)影響,所以在子線程添加timer,滑動(dòng)視圖時(shí),timer能正常運(yùn)行。

總結(jié)

1、如果是在主線程中運(yùn)行timer,想要timer在某界面有視圖滾動(dòng)時(shí),依然能正常運(yùn)轉(zhuǎn),那么將timer添加到RunLoop中時(shí),就需要設(shè)置mode 為NSRunLoopCommonModes。

2、如果是在子線程中運(yùn)行timer,那么將timer添加到RunLoop中后,Mode設(shè)置為NSDefaultRunLoopMode或NSRunLoopCommonModes均可,但是需要保證RunLoop在運(yùn)行,且其中有任務(wù)。

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

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

  • 一、什么是runloop 字面意思是“消息循環(huán)、運(yùn)行循環(huán)”。它不是線程,但它和線程息息相關(guān)。一般來講,一個(gè)線程一次...
    WeiHing閱讀 8,303評(píng)論 11 111
  • 原文地址:http://blog.ibireme.com/2015/05/18/runloop/ RunLoop ...
    大餅炒雞蛋閱讀 1,266評(píng)論 0 6
  • 深入理解RunLoop 由ibireme| 2015-05-18 |iOS,技術(shù) RunLoop 是 iOS 和 ...
    橙娃閱讀 967評(píng)論 1 2
  • 轉(zhuǎn)自http://blog.ibireme.com/2015/05/18/runloop 深入理解RunLoop ...
    飄金閱讀 1,084評(píng)論 0 4
  • 目標(biāo):強(qiáng)健血液循環(huán),收腹瘦腿,不損傷膝蓋 參考資料:簡書,知乎,網(wǎng)絡(luò)百科 1、減少低頭看手機(jī),多活動(dòng)脖子,有時(shí)頭痛...
    靈舞閱讀 187評(píng)論 0 0

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