为什么有时从 DISpatchQueue 调用时会出现 EXC_BAD_ACCESS?

巴特沃米耶·塞曼奇克

在以下代码中:

class DispatchQueuer: DispatchQueuerable {
    private let queue: DispatchQueue

    // MARK: - Initialization

    init(queue: DispatchQueue) {
        self.queue = queue
    }
    func asyncBackground(block: @escaping () -> Void) {
        DispatchQueue(label: "", qos: .background).async {
            block() //EXC_BAD_ACCESS
        }
    }
}

为什么会发生?

我按以下方式使用它:

    private let dispatchQueuer: DispatchQueuerable
    dispatchQueuer.asyncBackground { [weak self] in
        self?.setupTags()
        self?.setupSuppliers()
        self?.dispatchQueuer.asyncMain {
            completion?()
        }
    }
哑光

您有数据竞争问题。问题部分在于每次调用asyncBackground都在一个新队列上,因此您很快就会有多个冲突队列和冲突访问。你应该把你的队列变成一个单例队列。这样至少您将受益于目前您正在丢弃的串行队列。

请注意,您声明self.queue为实例属性。这在某种程度上是个好主意,但你永远不会使用它!你也把它扔掉。我个人会static let用来获得一个真正的单例串行队列,我会使用它。

即便如此,这也不会使您的访问成为线程安全的。但它会比你现在做的好很多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么会出现EXC_BAD_ACCESS错误

来自分类Dev

插入 NSManagedObject 时出现 EXC_BAD_ACCESS 错误

来自分类Dev

递归调用块时为EXC_BAD_ACCESS

来自分类Dev

调用函数时迅速EXC_BAD_ACCESS

来自分类Dev

引用自身时迅速调用AFNetworkReachabilityManager EXC_BAD_ACCESS

来自分类Dev

从C调用Swift闭包时出现EXC_BAD_ACCESS异常

来自分类Dev

有时会将EXC_BAD_ACCESS发送给实例,有时将无法识别的选择器发送给实例

来自分类Dev

运行合并排序递归算法时出现EXC_BAD_ACCESS错误

来自分类Dev

CGImageRef出现EXC_BAD_ACCESS错误

来自分类Dev

加载AVPlayer时出现错误线程1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)

来自分类Dev

尝试从字符串打印时出现错误:异常:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

来自分类Dev

EXC_BAD_ACCESS 执行关闭时

来自分类Dev

执行块时EXC_BAD_ACCESS

来自分类Dev

带有指针的Exc_bad_access

来自分类Dev

带有fscanf的EXC_BAD_ACCESS

来自分类Dev

使用MDQueryRef调用时CFR释放EXC_BAD_ACCESS

来自分类Dev

两次调用同一方法时,导致EXC_BAD_ACCESS的完成处理程序

来自分类Dev

EXC_BAD_ACCESS为什么我的对象被释放?

来自分类Dev

为什么在评论 malloc() 调用时会出现分段错误(核心转储)?

来自分类Dev

我猜 NotificationCenter 出现 EXC_BAD_ACCESS 错误?

来自分类Dev

调用GLeeInit()会得到EXC_BAD_ACCESS

来自分类Dev

ALAsset指针在访问时抛出EXC_BAD_ACCESS

来自分类Dev

在代码中添加UINavigationController时使用EXC_BAD_ACCESS

来自分类Dev

EXC_BAD_ACCESS(SIGSEGV)-运行Android Studio时

来自分类Dev

使用数组C ++时的“ EXC_BAD_ACCESS”

来自分类Dev

带有内存集的EXC_BAD_ACCESS

来自分类Dev

带有ARC的UITableView上的EXC_BAD_ACCESS错误?

来自分类Dev

带有字典的iOS 8.1上的EXC_BAD_ACCESS

来自分类Dev

带有viewWillTransitionToSize和Xcode 6.3的EXC_BAD_ACCESS

Related 相关文章

  1. 1

    为什么会出现EXC_BAD_ACCESS错误

  2. 2

    插入 NSManagedObject 时出现 EXC_BAD_ACCESS 错误

  3. 3

    递归调用块时为EXC_BAD_ACCESS

  4. 4

    调用函数时迅速EXC_BAD_ACCESS

  5. 5

    引用自身时迅速调用AFNetworkReachabilityManager EXC_BAD_ACCESS

  6. 6

    从C调用Swift闭包时出现EXC_BAD_ACCESS异常

  7. 7

    有时会将EXC_BAD_ACCESS发送给实例,有时将无法识别的选择器发送给实例

  8. 8

    运行合并排序递归算法时出现EXC_BAD_ACCESS错误

  9. 9

    CGImageRef出现EXC_BAD_ACCESS错误

  10. 10

    加载AVPlayer时出现错误线程1:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)

  11. 11

    尝试从字符串打印时出现错误:异常:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

  12. 12

    EXC_BAD_ACCESS 执行关闭时

  13. 13

    执行块时EXC_BAD_ACCESS

  14. 14

    带有指针的Exc_bad_access

  15. 15

    带有fscanf的EXC_BAD_ACCESS

  16. 16

    使用MDQueryRef调用时CFR释放EXC_BAD_ACCESS

  17. 17

    两次调用同一方法时,导致EXC_BAD_ACCESS的完成处理程序

  18. 18

    EXC_BAD_ACCESS为什么我的对象被释放?

  19. 19

    为什么在评论 malloc() 调用时会出现分段错误(核心转储)?

  20. 20

    我猜 NotificationCenter 出现 EXC_BAD_ACCESS 错误?

  21. 21

    调用GLeeInit()会得到EXC_BAD_ACCESS

  22. 22

    ALAsset指针在访问时抛出EXC_BAD_ACCESS

  23. 23

    在代码中添加UINavigationController时使用EXC_BAD_ACCESS

  24. 24

    EXC_BAD_ACCESS(SIGSEGV)-运行Android Studio时

  25. 25

    使用数组C ++时的“ EXC_BAD_ACCESS”

  26. 26

    带有内存集的EXC_BAD_ACCESS

  27. 27

    带有ARC的UITableView上的EXC_BAD_ACCESS错误?

  28. 28

    带有字典的iOS 8.1上的EXC_BAD_ACCESS

  29. 29

    带有viewWillTransitionToSize和Xcode 6.3的EXC_BAD_ACCESS

热门标签

归档