一般來說,一個線程一次只能執行一個任務,執行完成后線程就會推出。如果我們需要一個機制,讓線程隨時處理事件但并不退出,通常用do {}while 來處理。
這種稱之為Event loop,在Windows和node.js或者OSX/IOS里面都可以看到,它的關鍵點是:如何管理事件與信息,如何讓線程在沒有處理消息和事件時休眠以避免資源占用、在有消息到來時立刻被喚醒。
所以,runloop實際上就是一個對象,這個對象管理了其需要處理的事件和消息,并提供了一個入口函數來執行上面的Event Loop邏輯。線程執行了這個函數后,就會一直處于這個函數內部“接受消息——>等待——>處理”的循環中,直到傳入quit消息,函數返回!
iOS中提供了兩個對象:NSRunLoop和CFRunLoopRef
線程和runloop之間是一一對應的,其關系是保存在一個全局的dictionary里。線程剛創建時并沒有RunLoop,如果你不主動獲取,那它一直都不會有,
從iOS5推出ARC開始,我們就不用MRC了!
END.