代码之家  ›  专栏  ›  技术社区  ›  Jack Guo

继续包装KVO是否安全

  •  0
  • Jack Guo  · 技术社区  · 1 年前

    将KVO封装在这样的延续中安全吗?我担心的是,如果 play 在调用现有的KVO回调之前再次调用 observer 将被取消绑定,并且从未调用回调,使继续挂起

    var observer: NSKeyValueObservation?
    var playerItem: AVPlayerItem?
    
    func play(asset: AVURLAsset) async throws {
      playerItem = AVPlayerItem(asset: asset)
    
      let readyToPlay = try await withCheckedThrowingContinuation { continuation in
        observer = playerItem?.observe(\.status, changeHandler: { item, _ in
          swtich item.status:
            case .readyToPlay: continuation.resume(returning: true)
            default: continuation.resume(throwing: item.error!)
        }
      }
      ...
    }
    
    1 回复  |  直到 1 年前
        1
  •  0
  •   Rob Napier    1 年前

    您的担忧是正确的,应该很容易用一个小的测试程序来演示。(不应该需要AVPlayerItem;您可以使用任何NSObject子类进行测试。)