私はラインで次のコードを複数回アプリのクラッシュを実行すると:dispatch_async更新変数クラッシュ - スレッドセーフ
res.append(I)
エラーは致命的なエラーがある:負の数とUnsafeMutablePointer.destroy
をデバッグするmalloc_error_breakにブレークポイントを設定 か ポインタ解放されが割り当てられていない***はdispatch_async内のグローバル変数を更新するために、正しくないですか?
クラスのViewController:のUIViewController {
var result = Array<Int>()
func method(completion: (inner:() throws -> String)->Void){
let group:dispatch_group_t = dispatch_group_create();
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
var res = Array<Int>()
for i in 0..<4 {
dispatch_group_async(group,queue){
res.append(i)
print(res)
print("Block\(i)");
var s = 0
for k in 0..<1000 {
s = 2+3
}
print("Block\(i)End");
}
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
print("All background tasks are done!!");
print(res)
}
override func viewDidLoad() {
super.viewDidLoad()
self.method() { (inner:() throws -> String) -> Void in
do {
let res = try inner()
print(res)
} catch let error {
print(error)
}
}
}
基本的なマルチスレッドの問題 - 具体的に言及しない限り、DONTはオブジェクトがスレッドセーフであり、複数のスレッドから更新しないと仮定します。 –