前提・実現したいこと
シングルトンパターンのオブジェクトをマルチスレッドで利用したく、下記のコードを作成したところ、コレクションへの代入(updateValue)でEXC_BAD_ACCESSのエラーが発生します。
コレクション型をスレッドセーフで利用する方法を教えてください。
Swift
1import Foundation 2public class SingletonTest:NSObject { 3 4 static let shared = SingletonTest() 5 6 override init() { 7 super.init() 8 } 9 10 private var testDictionary:[Int:URL] = [:] 11 12 func testTask (url:URL, key:Int) { 13 testDictionary.updateValue(url, forKey:key) 14 print("Stored Value:(testDictionary[key])") 15 } 16} 17 18func testTask() { 19 let testObject = SingletonTest.shared 20 for keyIndex in 0..<5 { 21 DispatchQueue.global(qos: .utility).asyncAfter(deadline: .now()) { 22 testObject.testTask(url: URL(fileURLWithPath: "http://example.com/(keyIndex)/"), key: keyIndex) 23 } 24 } 25} 26
補足情報(FW/ツールのバージョンなど)
Swift 5
Xcode 12.5
回答1件
あなたの回答
tips
プレビュー