runloop的應(yīng)用:
1.NSTimer
2.ImageView顯示
3.PerformSelector
4.常駐線程
5.自動(dòng)釋放池
一個(gè)簡(jiǎn)單的例子,在子線程中完成一個(gè)任務(wù)后氨鹏,子線程就處于消亡。現(xiàn)在要求子線程完成任務(wù)后烦绳,再重新喚醒子線程陶因。解決辦法:考慮使用runloop杭措,使任務(wù)永遠(yuǎn)不能完成,那么子線程就不會(huì)銷(xiāo)毀伟墙。
所以在創(chuàng)建子線程的時(shí)候戳葵,在任務(wù)中添加一個(gè)runloop(必須有個(gè)timer或者source就乓,runloop才會(huì)執(zhí)行)。
這樣拱烁,就可以重新在原來(lái)的子線程中開(kāi)啟任務(wù)了生蚁。
總結(jié)下:
1.什么是 runloop
運(yùn)行循環(huán),跑圈戏自。內(nèi)部就是 do-while循環(huán)邦投,在這個(gè)循環(huán)內(nèi)部不斷的處理各種任務(wù)。
2. 一個(gè)線程對(duì)應(yīng)一個(gè)runloop,主線程的runloop默認(rèn)已經(jīng)啟動(dòng)浦妄。子線程的需要手動(dòng)啟動(dòng)(run)
3. runloop只能選擇一個(gè)mode啟動(dòng)尼摹,如果當(dāng)前的mode中沒(méi)有任何的source和timer,那么直接退出runloop剂娄。
4.自動(dòng)釋放池什么時(shí)候釋放蠢涝?
當(dāng)runloop 即將睡眠的時(shí)候銷(xiāo)毀之前的釋放池,重新創(chuàng)建一個(gè)新的
5.observer 可以監(jiān)聽(tīng)runloop的狀態(tài)
6.runloop的使用場(chǎng)景:
1.開(kāi)啟一個(gè)常駐線程阅懦,讓一個(gè)子線程不進(jìn)入消亡狀態(tài)和二,等待其他線程發(fā)來(lái)消息,處理其他事件耳胎。
1.1.在子線程中開(kāi)啟一個(gè)定時(shí)器惯吕。
1.2在子線程中進(jìn)行一些長(zhǎng)期監(jiān)控
2.可以控制定時(shí)器在特定模式下執(zhí)行。
3.可以添加observer監(jiān)聽(tīng)runloop的狀態(tài)怕午,比如監(jiān)聽(tīng)點(diǎn)擊事件的處理(在所有點(diǎn)擊事件之前做一些事情)