runloop的原理筆記

一般來說,一個線程一次只能執行一個任務,執行完成后線程就會推出。如果我們需要一個機制,讓線程隨時處理事件但并不退出,通常用do {}while 來處理。

這種稱之為Event loop,在Windows和node.js或者OSX/IOS里面都可以看到,它的關鍵點是:如何管理事件與信息,如何讓線程在沒有處理消息和事件時休眠以避免資源占用、在有消息到來時立刻被喚醒。

所以,runloop實際上就是一個對象,這個對象管理了其需要處理的事件和消息,并提供了一個入口函數來執行上面的Event Loop邏輯。線程執行了這個函數后,就會一直處于這個函數內部“接受消息——>等待——>處理”的循環中,直到傳入quit消息,函數返回!

iOS中提供了兩個對象:NSRunLoop和CFRunLoopRef

線程和runloop之間是一一對應的,其關系是保存在一個全局的dictionary里。線程剛創建時并沒有RunLoop,如果你不主動獲取,那它一直都不會有,

從iOS5推出ARC開始,我們就不用MRC了!

END.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容