通常,您可能希望从代码的多个部分观察一个模型对象。KVO可以工作,但我发现它会变得一团糟。使用每个模型的监听器协议可以使可以改变什么以及谁正在监听变得清晰。
DMListener提供了一种简单的方法来向您的类中添加监听器。它负责释放内存,因此只需将任何视图或控制器添加为监听器即可:)
查看示例项目,或者查看BitStore,那里我在生产代码中使用了此功能。
如果您没有使用CocoaPods,您将在 Pod/Classes
内找到源代码文件。
使用DMListener的模型类看起来是这样的
#import <DMListener/DMListeners.h>
@implementation DMDemoModel {
DMListeners* _listeners;
}
- (instancetype)init {
if (self == [super init]) {
_listeners = [[DMListeners alloc] init];
}
return self;
}
- (void)addListener:(id<DMDemoModelListener>)listener {
[_listeners addListener:listener];
}
- (void)refreshData {
[self performSelector:@selector(dataRefreshed) withObject:nil afterDelay:1.0];
}
- (void)dataRefreshed {
[_listeners notifyListeners:^(id<DMDemoModelListener> listener) {
[listener demoModelChanged:self];
}];
}
@end
要接收通知,只需调用addListener方法
DMDemoModel* model = [[DMDemoModel alloc] init];
[model addListener:self];
查看示例项目。您将在DMAppDelegate.m
内看到示例实现。
要运行示例项目,您首先必须在示例目录中运行 pod install
。
Dylan Marriott, [email protected]
DMListener在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。