RunLoop,是多線程的法寶,即一個線程一次只能執(zhí)行一個任務,執(zhí)行完任務后就會退出線程。主線程執(zhí)行完即時任務時會繼續(xù)等待接收事件而不退出。非主線程通常來說就是為了執(zhí)行某一任務的,執(zhí)行完畢就需要歸還資源,因此默認是不運行RunLoop的;
每一個線程都有其對應的RunLoop,只是默認只有主線程的RunLoop是啟動的,其它子線程的RunLoop默認是不啟動的,若要啟動則需要手動啟動;
在一個單獨的線程中,如果需要在處理完某個任務后不退出,繼續(xù)等待接收事件,則需要啟用RunLoop;
NSRunLoop提供了一個添加NSTimer的方法,可以指定Mode,如果要讓任何情況下都回調(diào),則需要設置Mode為Common模式;
實質(zhì)上,對于子線程的runloop默認是不存在的,因為蘋果采用了懶加載的方式。如果我們沒有手動調(diào)用[NSRunLoop currentRunLoop]的話,就不會去查詢是否存在當前線程的RunLoop,也就不會去加載,更不會創(chuàng)建。