iphone - 如何移除 KVO 观察者?

标签 iphone objective-c ios key-value-observing

在 View Controller 中,我创建了一个 subview 数组,可以随时从父 View 中删除,因此它们的生命周期比 View Controller 的生命周期短。

创建它们时,我几乎这样做:

  • 分配/初始化 subview
  • 添加 View Controller 作为 subview 的 frame 的观察者属性(property)。
  • 将其添加到保留数组
  • 将其添加到 View
  • 释放它

  • subview 没有对 View Controller 的引用。

    当用户删除 subview 时,它会被释放,并且我在控制台中收到一个错误,告诉我 View 的观察者 frame key 路径尚未删除。

    当被观察的 subview 不保留对观察者的引用时,如何删除观察者?

    反正没有像removeAllObservers这样的事情吗? ?

    我宁愿不必在 subview 中创建对观察者的引用,因为它在某种程度上违背了 KVO 的观点(我不妨使用委托(delegate)设置)。

    最佳答案

    我不确定你为什么要观察框架,但如果你只是想知道它什么时候被删除,你可以改用 NSNotificationCenter。从那里您的 subview 可以发布到通知中心它已被更改/删除。然后,您的父 View 将看到该通知,并可以根据通知中的内容对其进行处理。它在某种程度上是一个更松散的 kvo。

    这是一个很好的设置示例。
    Send and receive messages through NSNotificationCenter in Objective-C?

    这样,当 super View 被释放/卸载时,它只需要在通知中心删除它自己就可以看到该术语。

    无论如何,这是除 KVO 和委托(delegate)之外的另一种方法。

    关于iphone - 如何移除 KVO 观察者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8438652/

    相关文章:

    iphone - 释放通过 imageNamed 加载的保留 UIImage 属性?

    iphone - HTML,Javascript和CSS作为应用程序

    iphone - 停止旋转 youtubevideo player ios sdk

    ios - 如何将 AWS 联合 token 与 AWS iOS SDK 2.0 一起使用

    iphone - glFramebufferTexture2D 性能

    iphone - 灵活的iPhone按钮

    ios - 重新加载 Storyboard以更改语言

    ios - 使用现有字符串作为 valueForKey 值

    ios - URlRequest.httpBody 在 startLoading() 方法中是 nil swift 3.0 中的 URLProtocol

    ios - Phonegap 和 iPhone 应用程序