最近升级完swift4做了很多适配的工作,当然大部分适配还是停留在UI上的,尤其是iPhoneX出来之后,做了很多关于它的适配,包括刘海还有底部安全区域的适配。
但要命的是程序原来跑的好好的,但现在莫名其妙的在一些地方crash了,Oh No 什么情况这是,一阵的慌张,然后急匆匆到Google上进行查找解决方案,也就是如标题所述那样,我的英文一般,看字面意思是一个代码想要访问一个对象需要独占一块内存,我感觉是两段代码同时访问一个对象(内存)造成的。
下面阐述一下我解决这个问题的过程,按照自己的想法把代码的写法换了一下,让访问的书序变了一下。
原始代码如下
mDeptList?[section].isSubDeptExpand = !isExpandSection(section: section)
func isExpandSection(section:NSInteger) -> Bool
{
guard let aDept = mDeptList?[section] else { return false }
return aDept.isSubDeptExpand ?? false
}
修改好的代码如下
let isExpand = !isExpandSection(section: section)
mDeptList?[section].isSubDeptExpand = isExpand
从修改前和修改后代码对比不难发下,先去访问对象拿到我们要的结果之后然后再去对对象进行修改,这样就安全了,这个bug也就解决了。