一种规避多线程下全局变量异常的方法

问题代码:

1
2
3
4
5
6
7
8
9
10
11
12
//全局变量,可能会在多个线程被赋值
var name:String?
var arr:[NSObject : AnyObject]?

//某个类的代码片段
if (name == nil || if arr == nil) {
return
}

if arr[name] == nil { //有时候,这里会引发crash
return
}

原因分析:
第一个if判断的时候,name还不是nil,所以能走到第二个if语句;结果,在第二个if执行前,name被别动线程赋值为nil了,所以引发crash

修改方案:

1
2
3
4
5
6
7
8
9
10
guard let curName = name else {
return
}
guard let curArr = arr else {
return
}

guard let curAge = curArr[curName] else {
return
}

Contents
,