5

当我运行以下代码(为演示崩溃而创建的简化示例)时,它会在我选择运行时按预期执行(两个 os_log 消息都打印在控制台中)。

但是,当我从 Memory Debug Navigator 在 Instruments 中打开它时 - 通过按 Restart - 它会崩溃(仅在控制台中打印第一条 os_log 消息)。

崩溃发生在观察(...)。

import os
import UIKit

class ObserverCrashingExample: NSObject {

    @objc private var animation: UIViewPropertyAnimator?
    private var observer: NSKeyValueObservation?

    override init() {

        super.init()

        animation = UIViewPropertyAnimator( duration: 1, curve: .linear, animations: { })

        animation!.pauseAnimation()

        os_log("X_AMPLE Executes")

        observer = animation!.observe(\.isRunning, options: [.new, .old]) { _ , _ in }

        os_log("X_AMPLE Does not execute")

    }

    required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }

}

我正在运行 Xcode 9.3、Swift 4.1、iOS 11.3 部署目标。

有任何想法吗?这是编译器问题吗?

干杯

4

1 回答 1

0

我尝试了三个字绕:

  1. 禁用“记录引用计数”。这阻止了它崩溃。但是仪器显示的泄漏比平时多得多,这使得定位真正的泄漏变得不可能。
  2. 评论我所有的 KVO 调用。在我的情况下不起作用。
  3. 将我的代码降级到 Swift 4.0。我重新安装了 Xcode 9.2,它现在可以工作了。
于 2018-06-08T01:54:45.940 回答