中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS多線程開發之NSObject的多線程方法

發布時間:2020-08-03 08:49:12 來源:網絡 閱讀:324 作者:ymanmeng123 欄目:移動開發
  • NSObject的多線程方法

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

開啟后臺執行任務的方法

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

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

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

     

  • 多線程中的資源競爭

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

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

有臨界區出現,就可能是一個潛在的沖突點,需要程序員精心去設計防止潛在的沖突發生。

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

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

    iOS多線程開發之NSObject的多線程方法

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

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

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


  • RunLoop機制

提供了一種異步執行代碼的機制,不能并發執行任務

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

RunLoop的主要目的是保證線程不會被系統終止

工作特點:

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

     當沒有事件發生時,Run Loop會進入休眠狀態,從而達到省電的目的

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

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

    

iOS多線程開發之NSObject的多線程方法

iOS多線程開發之NSObject的多線程方法

     

   


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宿松县| 南和县| 泾源县| 楚雄市| 赫章县| 华坪县| 谢通门县| 五家渠市| 鄂尔多斯市| 顺平县| 遵义县| 丹阳市| 镇原县| 平潭县| 瓮安县| 固阳县| 兴国县| 晋州市| 衢州市| 连平县| 商洛市| 浮山县| 卓资县| 宁化县| 海盐县| 寿阳县| 浦江县| 津南区| 星座| 蒲城县| 于田县| 井研县| 正阳县| 克山县| 赞皇县| 岐山县| 宜城市| 寿宁县| 太原市| 桑植县| 原平市|