【发布时间】:2017-05-25 13:55:01
【问题描述】:
我有三个类共享NSObject 子类的同一个实例。
所有这三个类都可以修改该共享实例属性,并且当发生这种情况时,该共享实例必须通知所有其他三个类 X 变量已更改。
这是使用KVO的完美场景,但我认为这是非常不一致的代码,包含很多硬编码的字符串,因此不会发生编译时警告或检查,出现问题时很难获取堆栈跟踪,在重构代码的情况下,更改所有内容并祈祷不要忘记任何内容是一件令人头疼的事情,在解除分配时手动删除观察者,通过向所有类添加相同的观察者来重复大量代码等。
由于这个原因,我认为delegates 可能是解决大多数(如果不是全部)这些问题的好方法。易于实现,非常清晰和有文档记录,如果编译器告诉你有什么改变,不需要手动设置为 nil 任何东西,不需要硬编码的字符串,出现问题时明显的 stracktrace 等等。
我的delegate 方法将覆盖所有变量的setters,我想监听它们的变化并在那里调用委托,以便所有类都可以知道该变化。
您如何看待这种方法?
提前谢谢你!
【问题讨论】:
-
共享实例子类将只有一个带有
n可选方法的协议。其余的类必须实现该协议才能监听共享实例的变化。 -
您是否考虑过使用 NotificationCenter 处理多个通知?
-
NSNotificationCenter与KVO非常相似,但KVO仅用于控制变量,而这正是我所需要的。所以NSNotificationCenter的问题与使用KVO时的问题完全相同:硬编码字符串、重构时头痛、未记录、重复代码等......
标签: ios objective-c delegates key-value-observing