观察财产崩溃仪器(泄漏配置文件)Xcode 9.3(Swift 4.1)



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

但是,当我从内存调试导航器在仪器中打开它时 - 通过按重新启动 - 它崩溃(控制台中仅打印第一条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部署目标。

有什么想法吗?这是编译器问题吗?

干杯

我尝试了三个单词:

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

最新更新