NSRunloop

NSRunloop和線程的關係

NSRunloop屬於一個線程,角色如下:

1、iOS中消息調度機制的封裝;
2、不能被用戶創建和顯式的管理;
3、每一個線程會自動創建一個對應的NSRunloop(一對一);
4、新創建的線程需要自己手動啓動NSRunloop(通過currentRunLoop獲取);
5、如果NSRunloop中沒有任何source的話,該Runloop中的任何run方法都會立即返回(因此線程一般通過一個while循環維持該線程不馬上退出),如:
while (flags)
{
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantFuture]];
}
注:當NSRunloop中包含有事件,在沒有事件觸發或超時之前你調用的Run Loop運行方法不會立刻返回,它會持續監聽其他事件源,Run Loop會讓子線程進入sleep等待狀態;只有當Timer Source或者Input Source事件發生時,子線程纔會被喚醒處理觸發的事件;但Timer source比較特殊,Timer Source事件發生處理後,Run Loop運行方法runUntilDate也不會返回;而其他非Timer事件的觸發處理會讓這個Run Loop退出並返回YES。當Run Loop運行在一個特定模式時,如果該模式下沒有事件源,Run Loop會立刻返回NO。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章