Simultaneous accesses to 0x10d000908, but modification requires exclusive access.

最近升级完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也就解决了。

0 0 vote
Article Rating
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x