#import <Foundation/Foundation.h>
@interfaceFBNotification:NSObject
- (void) addObserver:(NSString*)observer forNotification:(NSString*) notify block:(void(^)(NSString* info))block;
- (void) postObserverForNotification:(NSString*) notify info:(NSString*)info;
- (void) removeObserver:(NSString*) observer forNotification:(NSString*) notify;
@end
@interfaceFBNotification()
@property(nonatomic,strong)NSMutableDictionary* dict;
@property(nonatomic,strong)NSMutableDictionary* observers;
@end
@implementationFBNotification
typedef void(^myBlock)();
staticFBNotification* _shareInstace;
- (NSMutableDictionary*) dict{
if(_dict ==nil) {
_dict = [NSMutableDictionarydictionary];
}
return_dict;
}
- (NSMutableDictionary*) observers {
if(_observers ==nil) {
_observers = [NSMutableDictionarydictionary];
}
return_observers;
}
+ (instancetype) notificationCenter {
staticdispatch_once_tonceToken;
dispatch_once(&onceToken, ^{
_shareInstace = [[selfalloc]init];
});
return _shareInstace;
}
- (void)addObserver:(NSString*)observer forNotification:(NSString*)notify block:(void(^)(NSString* info))block {
NSMutableSet* set =self.dict[notify];
if(set ==nil) {
set = [NSMutableSet set];
self.dict[notify] = set;
}
[set addObject:observer];
NSMutableArray* blockArray =self.observers[observer];
if(blockArray ==nil) {
blockArray = [NSMutableArrayarray];
self.observers[observer] = blockArray;
}
[blockArray addObject:block];
}
- (void)postObserverForNotification:(NSString*)notify info:(NSString*)info {
NSMutableSet*set =self.dict[notify];
for(id observer in set) {
NSMutableArray* array =self.observers[observer];
for(myBlock blockinarray) {
block(info);
}
}
}
- (void) removeObserver:(NSString*)observer forNotification:(NSString*)notify {
NSMutableSet* set =self.dict[notify];
if(set ==nil) {
NSLog(@"set is null");
return;
}
[set removeObject:observer];
[self.observers removeObjectForKey:observer];
}
@end
int main(intargc,constchar* argv[]) {
[[FBNotification notificationCenter] addObserver:@"o1"forNotification:@"xxx"block:^(NSString* info){
NSLog(@"o1 reveive xxx:%@",info);
}];
[[FBNotification notificationCenter] addObserver:@"o2"forNotification:@"xxx"block:^(NSString* info){
NSLog(@"o2 reveive xxx:%@",info);
}];
[[FBNotification notificationCenter] addObserver:@"o1"forNotification:@"xxx"block:^(NSString* info){
NSLog(@"o1 reveive xxx:%@",info);
}];
//[[FBNotification notificationCenter] removeObserver:@"o1" forNotification:@"xxx"];
[[FBNotification notificationCenter] removeObserver:@"o2"forNotification:@"xxx"];
[[FBNotification notificationCenter]postObserverForNotification:@"xxx"info:@"hahaha"];
return 0;
}