一個run loop就是一個事件處理循環,用來不停的監聽和處理輸入事件並將其分配到對應的目標上進行處理。面試
咱們須要一個機制,讓線程能隨時處理事件但並不退出。 在主線程會一直存在一個Runloop,在用戶點擊應用屏幕是會喚醒,在應用空閒時會進入sleep狀態,簡單來講,就是經過Run Loop來實現一個圓形線程,網絡
面試常常被問到這個問題,這個問的就是Run Loop這個點
每一個runloop中都建立一個Autorelease Pool,在一個runloop進入BeforeWaiting(休眠)的時候AutoreleasePool就會釋放
--oop
有一次面試被問到AFNetWorking 中的URLConnection 與Run Loop有什麼關係? ………啊?優化
網絡請求須要Run Loop去驅動,URLConnection中單獨開啓了一個名爲「AFNetWorking」的線程,在runloop run 以前會添加一個 NSMachPort端口,爲了保證RunLoop 不退出。這樣就有了一個網絡請求線程去服務整個應用,不會佔用主線程資源
--線程
在cell裏面的圖片設置放置在defaultRunLoopMode裏面,在滑動的時候圖片就不會加載。
--
ScrollerView滑動的時候不影響Timer?
默認scheduledTimer建立Timer的時是在NSRunLoopDefaultMode 裏,滑動的時候會進入NSRunLoopTrackingMode狀態,若不但願timer被ScrollerView影響,須要添加到NSRunLoopCommonModes狀態
server
CFRunLoopObserverRef,這個是用來觀測RunLoop的狀態變化事件