在我的模型中,我有一组称为事件的对象。我希望每当将新对象添加到事件时通知我的控制器。
我认为这样做的一个好方法是使用 KVO 模式在事件发生变化时得到通知(从添加的新对象)
// AppDelegate
// events is a NSMutableArray @property/@synthesize etc...
[appDelagate addObserver:self
forKeyPath:@"events"
options:NSKeyValueObservingOptionNew
context:NULL];
但是没有调用observeValueForKeyPath方法,我发现数组不符合 KVO :-(
一种选择是通过为 keyPath调用willChangeValueForKey来手动触发该方法
// ViewController
[self willChangeValueForKey:@"events"];
[self.events addObject:event];
[self didChangeValueForKey:@"events"];
但这感觉很重,因为我可能还应该跟踪事件数组的前后状态,以便可以从observeValueForKeyPath方法访问它。
一种方法是使用标准数组(而不是可变数组)并在每次我想添加一个新对象时创建/设置一个新的事件实例,或者我可以创建一个单独的属性来跟踪有多少项目在可变数组(我希望你能观察到 @"events.count" )。
另一种选择是使用 NSNotificationCenter。我还阅读了一些建议使用块的答案(但我不知道从哪里开始)。
最后,我可以在我的委托中保留我的控制器实例并发送相关消息吗?
// Delegate
[myController eventsDidChange];
保留委托对控制器的引用是否很奇怪?
我正在努力了解如何选择最佳使用方法,因此非常感谢任何有关性能、未来代码灵活性和最佳实践的建议!