iOS多線程開發(fā)之NSObject的多線程方法

  • NSObject的多線程方法

    創(chuàng)新互聯(lián)擁有網站維護技術和項目管理團隊,建立的售前、實施和售后服務體系,為客戶提供定制化的成都做網站、網站制作、網站維護、成都機柜租用解決方案。為客戶網站安全和日常運維提供整體管家式外包優(yōu)質服務。我們的網站維護服務覆蓋集團企業(yè)、上市公司、外企網站、商城建設、政府網站等各類型客戶群體,為全球近千家企業(yè)提供全方位網站維護、服務器維護解決方案。

NSObject提供了一些多線程的方法,這些方法使用簡單而且量級輕,但無法對線程進行必要的控制,所以并不推薦使用。

開啟后臺執(zhí)行任務的方法

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

在后臺線程中通知主線程執(zhí)行任務的方法

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

     

  • 多線程中的資源競爭

并發(fā)編程中許多問題的根源就是在多線程中訪問共享資源,資源可以是一個屬性、一個對象、網絡設備或者一個文件等

在多線程中共享的資源被稱作臨界資源,訪問了臨界資源的那一部分代碼被稱作臨界區(qū)

有臨界區(qū)出現,就可能是一個潛在的沖突點,需要程序員精心去設計防止?jié)撛诘臎_突發(fā)生。

在多線程開發(fā)中,如果訪問了臨界資源(共享資源),由于線程運行切換的時機問題可能會導致得到的結果是錯誤的。

在爭奪臨界資源時,可以使用互斥鎖將臨界區(qū)鎖住,方法是使用@synchronized。

    iOS多線程開發(fā)之NSObject的多線程方法

還有一種保護屬性setter方法的原子操作是,在@property中制定atomic關鍵字,即在使用setter方法時,將其鎖住。

在iOS開發(fā)中,不建議使用@synchronized和atomic(代價非常大),也就是說盡量不要去搶奪資源

正是出于性能的考慮,UIKit框架的絕大部分類都不是線程安全的,所以蘋果才要求更新UI的操作一定要放到主線程去做

  • RunLoop機制

提供了一種異步執(zhí)行代碼的機制,不能并發(fā)執(zhí)行任務

在主隊列中,MainRunLoop直接配合任務的執(zhí)行,負責處理UI事件、計數器、以及其他內核相關事件。

RunLoop的主要目的是保證線程不會被系統(tǒng)終止

工作特點:

     當有事件發(fā)生時,Run Loop會根據具體的事件類型通知應用程序做出響應

     當沒有事件發(fā)生時,Run Loop會進入休眠狀態(tài),從而達到省電的目的

     當事件再次發(fā)生時,Run Loop會被重新喚醒,處理事件

iOS程序主線程設置了RunLoop,其他線程沒有設置

    

iOS多線程開發(fā)之NSObject的多線程方法

iOS多線程開發(fā)之NSObject的多線程方法

     

   

網站標題:iOS多線程開發(fā)之NSObject的多線程方法
本文網址:http://muchs.cn/article40/jpgdeo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供品牌網站設計App開發(fā)、手機網站建設、網站改版、域名注冊App設計

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網站建設公司