通知是使用观察者模式来实现的用于跨层传递消息的机制,传递方式为一对多
通知机制&原理
在NSNotificationCenter通知中心会维护一个map(字典及图上Notification_Map)表,它的key(notificationName)是通知的名字,value是我们添加的观察者observer,这里的观察有可能是多个所以是观察者列表,列表中的成员应该包含观察者、观察者调用的方法等
//生成一个单利通知类 添加一个字典
+(WWNotificationCenter *)defaultCenter{
static WWNotificationCenter * singleTon;
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
singleTon = [[self alloc]initSingleton];
});
return singleTon;
}
//初始化字典
-(instancetype)initSingleton{
if ([super init]){
_obsetvers = [[NSMutableDictionary alloc]init];
}
return self;
}
-(void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSString *)aName object:(nullable)anObject{
if ([self.obsetvers objectForKey:aName]){//名字为aName通知是否添加过观察者
NSMutableArray *arrays =(NSMutableArray*)[self.obsetvers objectForKey:aName];
//创建数组模型
WWObserverModel *observerModel =[[WWObserverModel alloc]init];
observerModel.observer = observer;
observerModel.selector = aSelector;
observerModel.notifiaionName = aName;
observerModel.objcet = anObject;
[arrays addObject:observerModel];
}else{
//名字为aName通知是否添加过观察者 创建通知列表 加到字典中
}
详细看demo...
}
网友评论