關於RunLoop,runloop

來源:互聯網
上載者:User

關於RunLoop,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方法.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.