如何观察对象实例的创建/销毁?

dug*_*gla 4 cocoa objective-c key-value-observing key-value-coding

我被KVC/KVO迷住了.超级强大.但是有一个问题.我试图成为真正的MVC道德,但我认为没有办法使用观察模式来监视Objective-C类实例的分配或释放.

这实际上很重要,因为我有一个模型具有细粒度的内部消息,我想从控制器(或委托)观察.对我来说,绊脚石是我没有看到,在模型外部,我可以删除一个即将被解除分配的子组件的观察者,而控制器不知道模型的内部逻辑会破坏封装.

有人可以为这种情况建议一种方法.

谢谢,道格

Jim*_*eia 6

道格 - 你的描述中确实没有足够的信息知道你在做什么以及如何最好(或者如果它是合适的话)将KVO应用于问题.

KVO就是观察物体的属性.您通常不应该关心它们何时被创建或销毁,除非您必须在它们被销毁之前停止观察它们.

当这些对象对您感兴趣时,您应该开始和停止观察对象.考虑一个图形绘图包,其中文档具有有序的形状数组,并且您有兴趣观察每个形状的backgroundColor属性.

我们不会尝试观察Shape实例的实例化和释放,而是在文档中观察"shapes"属性.通过该观察者,我们可以确定何时向文档添加或从文档中删除形状.将形状添加到文档后,我们开始观察它.当它从文档中删除时,我们停止观察它.(请注意,它可能会从文档中删除但不会被释放,如果它在撤消堆栈上,等等)

在模型的对象图中,要使用KVO,您需要以符合KVO的方式添加和删除对象图中的对象,以便您可以观察关系突变,并在该观察者中,启动和停止属性观察者相关对象.