這篇文章為您講述關於RunLoop的文章,具體方法請看介紹
首先我們要先認識一下這個RunLoop;
NSRunLoop是Cocoa框架中的類,與之的Core Fundation 中CFRunLoopRef類.
這兩者的區別是,前者不是線程安全的,而後者是線程安全的.
RunLoop的應用
一般我們不需要創建或者顯示啟動RunLoop,有兩種情況,我們需要必須手動設置它:
在分線程中使用定時器
定時器的實現便是基於RunLoop的,平時我們使用定時器或許沒有對RunLoop做什麼操作,那是因為主線程RunLoop默認是啟動運行的, 如果我們在子線程中也需要重復執行某一個動作,就需要手動進行操作添加
[[NSRunLoop currentRunLoop]run];
每條線程都有唯一的一個與之對應的RunLoop對象
主線程的RunLoop已經自動創建好了,子線程的RunLoop需要主動創建
RunLoop在第一次獲取時創建,在線程結束時銷毀
作用:
a.保持程序的持續運行(IOS程序為什麼能一直存活)
b.處理APP中的各種事件(比如觸摸事件,定時器事件NSTimer,selector事件[performSelector)
c.節省CPU資源,提高程序性能,有事情就做事情,沒事情就休息.
如果沒有RunLoop,那麼程序以啟動就會退出,什麼事情都做不了.
如果有了RunLoop,那麼相當於在內部有了一個死循環,能夠保證程序的持續運行
RunLoop更強大的地方在於對消息的監聽,因為CFRunLoopRef的線程安全優勢,我們通常會更多使用後者。
輸入源被注冊進Runloop中時會有方法進行remove,但是定時器卻沒有,但是定時器中的invalidate方法可以將其從runloop中移除,正如官方文檔的說明:invalidate是重要也是唯一的可以將定時器從runloop的注銷的方法,所以如果我們創建了定時器,就一定要在不使用時調用invalidate方法.
多多關注本站,我們將為您收集更多的Android開發相關文章.
【關於RunLoop】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!