CADisplayLink引发的unrecognized selector sent to instance

51 阅读1分钟

在代码中用CADisplayLink去执行动画监听,在动画未执行完时,画面左滑退出,闪退。 报错:unrecognized selector sent to instance 即对象回收了,但事件响应还需要它。

CADisplayLink在viewDidLoad中启用:

// YZTargetProxy防止强引用
displayLink = CADisplayLink(target: YZTargetProxy(target: self), selector: #selector(animationCallback))
// 添加到线程
displayLink?.add(to: .current, forMode: RunLoop.Mode.default)

解决这个问题,只要在viewDidDisappear中把displayLink从线程中主动移除掉。

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    displayLink?.remove(from: .current, forMode: RunLoop.Mode.default)
    displayLink = nil
}