runloop是一個(gè)運(yùn)行循環(huán)夜涕,是用來(lái)管理線程的敌完。如果沒(méi)有線程的話碉纺,runloop也就沒(méi)有存在的必要. 程序一啟動(dòng)就會(huì)開(kāi)啟一個(gè)主線程,主線程開(kāi)完后就會(huì)跑起來(lái)一個(gè)跟主線程對(duì)應(yīng)的runloop遣鼓,runloop能保證主線程在程序運(yùn)行期間不被銷毀啸盏,線程會(huì)處于 “接收消息 -> 處理->等待”這個(gè)循環(huán)中,這個(gè)就是runloop保證的骑祟,保證線程在執(zhí)行完任務(wù)后回懦,便進(jìn)入休眠狀態(tài),不會(huì)退出次企,隨時(shí)等待新任務(wù)怯晕。
runloop與線程的關(guān)系
- 每條線程都有唯一個(gè)的一個(gè)與之對(duì)應(yīng)的線程
- 主線程的runloop系統(tǒng)默認(rèn)啟動(dòng),子線程的runloop需要主動(dòng)開(kāi)啟
runloop使用的時(shí)候
開(kāi)發(fā)中最常用的使用的困惑的地方缸棵,就是添加NSTimer的時(shí)候和scrollView的滾動(dòng)不能共存的問(wèn)題舟茶,因?yàn)閞unloop只能支持一種mode,當(dāng)我們滾動(dòng)的時(shí)候,runloop會(huì)自動(dòng)切換到UITrackingRunLoopMode模式蛉谜,定時(shí)器就停止了相應(yīng)。解決辦法有兩種