亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

iOS如何使用多線程提高數據并發訪問

發布時間:2021-10-21 10:10:31 來源:億速云 閱讀:251 作者:小新 欄目:移動開發

小編給大家分享一下iOS如何使用多線程提高數據并發訪問,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

線程同步

現在,讓我們轉向多線程另一個非常重要的部分。由于每一個線程都運行在自己的堆棧中,創建自己的對象,那么你的線程是如何和應用中的其他線程通訊和共享數據的呢?前面提到過,當你在多個線程中共享你的數據結構或對象時是有風險的,因為很多線程會試圖改變對象的數據結構。

首先,我向你介紹一個新的術語叫線程安全。線程安全類(或函數)是這樣的類,你不需要擔心之前提到的安全性問題。這些類要么很小心的使用了鎖進行處理,要么他們是不可變的(他們不會被改變)。下面是線程安全性的類或函數:

  • NSArray

  • NSConnection

  • NSData

  • NSDate

  • NSDictionary

  • NSNumber

  • NSObject

  • NSSet

  • NSString

相反,下面是可變的,非線程安全的類:

  • NSMutableArray

  • NSMutableAttributedString

  • NSMUtableCharacterSet

  • NSMutableData

  • NSMutableDictionary

  • NSMutableSet

  • NSMutableString

為什么你更應該使用線程安全的類,而不是使用非線程安全的類?為什么你不使用mutble類,但確保使用了鎖?讓我給你一個使用鎖的例子,在用線程訪問對象時可能會改變對象:

NSMutableArray* myArray = GetSharedArray();

id anObject;

if ([myArray count] > 0) {

   anObject = [myArray objectAtIndex:0];

}

[anObject doSomething];

這個例子非常簡單,但是你幫你理解了一個非常重要的概念。你看到這段代碼的問題了嗎?在你檢查數組的長度之后,另一個線程可以修改數組,那么數組中可能不再有對象了,因為其他的線程可能刪除了數組中的所有對象。因此,你可以通過使用鎖來解決這個問題,但它不是最好的解決辦法。

iOS如何使用多線程提高數據并發訪問

這樣會好很多,但是依然還有問題,比如你獲取到的對象可能會被其他線程修改。因此,下一步要把[anObject doSomething];也加入到鎖中。

iOS如何使用多線程提高數據并發訪問

如果myArray是NSArray,而不是NSMutableArray,你根本就不需要鎖。你可以正常的調用他們。

iOS如何使用多線程提高數據并發訪問

相對于可變對象來說,這就是使用不可變對象的好處。你可以確保當你在處理這些對象時,沒有人能夠修改或改變他們的屬性。

以上是“iOS如何使用多線程提高數據并發訪問”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

ios
AI

德庆县| 温宿县| 潞西市| 台前县| 应城市| 淮北市| 多伦县| 西和县| 辉县市| 容城县| 临安市| 德令哈市| 凯里市| 晋江市| 泽州县| 宝山区| 华坪县| 白山市| 枣庄市| 巴塘县| 塘沽区| 磐石市| 扬中市| 新巴尔虎右旗| 神池县| 惠安县| 阜城县| 扎兰屯市| 双城市| 门源| 新干县| 佛山市| 龙泉市| 多伦县| 永德县| 襄樊市| 军事| 阳江市| 双江| 钟祥市| 城固县|