您好,登錄后才能下訂單哦!
NSObject的多線程方法
NSObject提供了一些多線程的方法,這些方法使用簡單而且量級輕,但無法對線程進行必要的控制,所以并不推薦使用。
開啟后臺執行任務的方法
- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
在后臺線程中通知主線程執行任務的方法
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
多線程中的資源競爭
并發編程中許多問題的根源就是在多線程中訪問共享資源,資源可以是一個屬性、一個對象、網絡設備或者一個文件等
在多線程中共享的資源被稱作臨界資源,訪問了臨界資源的那一部分代碼被稱作臨界區
有臨界區出現,就可能是一個潛在的沖突點,需要程序員精心去設計防止潛在的沖突發生。
在多線程開發中,如果訪問了臨界資源(共享資源),由于線程運行切換的時機問題可能會導致得到的結果是錯誤的。
在爭奪臨界資源時,可以使用互斥鎖將臨界區鎖住,方法是使用@synchronized。
還有一種保護屬性setter方法的原子操作是,在@property中制定atomic關鍵字,即在使用setter方法時,將其鎖住。
在iOS開發中,不建議使用@synchronized和atomic(代價非常大),也就是說盡量不要去搶奪資源
正是出于性能的考慮,UIKit框架的絕大部分類都不是線程安全的,所以蘋果才要求更新UI的操作一定要放到主線程去做
RunLoop機制
提供了一種異步執行代碼的機制,不能并發執行任務
在主隊列中,MainRunLoop直接配合任務的執行,負責處理UI事件、計數器、以及其他內核相關事件。
RunLoop的主要目的是保證線程不會被系統終止
工作特點:
當有事件發生時,Run Loop會根據具體的事件類型通知應用程序做出響應
當沒有事件發生時,Run Loop會進入休眠狀態,從而達到省電的目的
當事件再次發生時,Run Loop會被重新喚醒,處理事件
iOS程序主線程設置了RunLoop,其他線程沒有設置
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。