代码之家  ›  专栏  ›  技术社区  ›  Travis Griggs

GCD TimerSource在未激活时是否会导致解除锁定失败?

  •  0
  • Travis Griggs  · 技术社区  · 5 年前

    我不明白是什么导致了这个代码:

    @IBAction func reset() {
        DemoConduit()
    }
    

    要在退出时产生此错误,请执行以下操作:

    6 TWiG_MC.DemoMCBrowserController.reset()
    5 _swift_release_dealloc
    0 _dispatch_release_dealloc
    

    DemoConduit 这是一门课。基于直觉和掷镖,我将其归结为与DemoConductor中的以下属性/实例变量有关:

    let tickSource = DispatchSource.makeTimerSource(queue: DispatchQueue.main)
    

    不久前我从NSTimer转换了这个。通常,从该类创建的对象表现良好。但这似乎是因为在大多数情况下,我运行的代码运行:

    self.tickSource.activate()
    

    这是一种令人费解的错误。我是否遗漏了一些说明,如果将makeTimerSource的结果存储在属性中,而不激活它,则会混淆引用计数系统?我在问我错过了什么?为什么会发生这种情况?

    0 回复  |  直到 5 年前
    推荐文章