#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)init {
//      if (self = [super init]) {
//         self.dict = [NSMutableDictionary dictionary];
//      }
//      return self;
//}


+ (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 {
     //NSLog(@"%@",self.observers);
     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;
}

results matching ""

    No results matching ""