本文介绍: 崩溃提示:Terminating app due to uncaught exception ‘NSGenericException’, reason: ‘*** Collection was mutated while being enumerated.’如果逻辑稍微有点复杂,为了防止死锁还是递归锁吧。原因就是变量数组时候,改变了数组内容(或增或减数组中的元素)。再定义一个一模一样的数组B,将原数组内容复制给数组B,再遍历数组B。

崩溃提示
崩溃提示:Terminating app due to uncaught exception ‘NSGenericException’, reason: ‘*** Collection <CALayerArray: 0x14df0bd0> was mutated while being enumerated.’

原因就是变量数组的时候,改变了数组的内容(或增或减数组中的元素)。

解决办法
方法
定义一个一模一样的数组B,将原数组的内容复制给数组B,再遍历数组B

let arr2 = NSArray(array: arr)
for i in arr2.enumerated() {
            
}

方法
创建一个串行队列,之后将对数组的操作全部放到队列
代码如下

_queue = dispatch_queue_create("com.app.serialQueue", DISPATCH_QUEUE_SERIAL);

dispatch_async(_queue, ^{
    // 修改或者枚举遍历删除数组

});

方法
用锁,互斥锁和递归锁。如果逻辑稍微有点复杂,为了防止死锁还是递归锁吧。

let lock = NSLock()// NSRecursiveLock()
self.lock.lock(); defer { self.lock.unlock() }

参考

原文地址:https://blog.csdn.net/zcl369369/article/details/129028447

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_38996.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注