一,通知
自定义通知
#import "MyNotifacationCenter.h"
#import "MyNotifationModel.h"
@interface MyNotifacationCenter ()
@property (nonatomic ,strong) NSMutableDictionary *mutDic;
@end
@implementation MyNotifacationCenter
+ (MyNotifacationCenter *)shareNotifationCenter{
static dispatch_once_t onceToken;
static MyNotifacationCenter *single;
dispatch_once(&onceToken, ^{
single = [[self alloc]initSingle];
});
return single;
}
- (instancetype)initSingle{
if ([super init]) {
_mutDic = [NSMutableDictionary dictionary];
}
return self;
}
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id )anObject{
if (![_mutDic objectForKey:aName]) {
NSMutableArray *arrys = [NSMutableArray array];
MyNotifationModel *model = [[MyNotifationModel alloc]init];
model.observer = observer;
model.selector = aSelector;
model.name = aName;
model.object = anObject;
[arrys addObject:model];
[_mutDic setObject:arrys forKey:aName];
}else{
NSMutableArray *arrys = [_mutDic objectForKey:aName];
MyNotifationModel *model = [[MyNotifationModel alloc]init];
model.observer = observer;
model.selector = aSelector;
model.name = aName;
model.object = anObject;
[arrys addObject:model];
}
}
- (id <NSObject>)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(MyNotifationModel *note))block
{
//如果不存在,那么即创建
if (![_mutDic objectForKey:name]) {
// 创建数组模型
NSMutableArray *arrys = [NSMutableArray array];
MyNotifationModel *model = [[MyNotifationModel alloc]init];
model.name = name;
model.object = obj;
model.operationQueue = queue;
model.block = block;
[arrys addObject:model];
[_mutDic setObject:arrys forKey:name];
}else{
//如果存在,取出来,继续添加即可
NSMutableArray *arrays = (NSMutableArray*)[_mutDic objectForKey:name];
MyNotifationModel *model = [[MyNotifationModel alloc]init];
model.name = name;
model.object = obj;
model.operationQueue = queue;
model.block = block;
[arrays addObject:model];
}
return nil;
}
- (void)postNotificationName:(NSString *)aname object:(id)anObject userInfo:(NSDictionary *)dic{
NSMutableArray *arrys = [_mutDic objectForKey:aname];
[arrys enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
MyNotifationModel *model = (MyNotifationModel *)obj;
id observer = model.observer;
SEL selector = model.selector;
NSString *name = model.name;
id object = model.object;
if (!model.operationQueue) {
[observer performSelector:selector withObject:dic];
}else{
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
model.block(dic);
}];
[model.operationQueue addOperation:operation];
}
}];
}
- (void)removeObserver:(id)observer name:(NSString *)aName object:(nullable id)anObject{
NSMutableArray *arrys = [_mutDic objectForKey:aName];
[arrys enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
MyNotifationModel *model = (MyNotifationModel *)obj;
[arrys removeObject:model];
}];
}
- (void)removeNotification:(id)observer{
}
#import <Foundation/Foundation.h>
typedef void (^OperationBlock)(id);
@interface MyNotifationModel : NSObject
@property (nonatomic ,weak) id observer;
@property (nonatomic ,copy)NSString *name;
@property (nonatomic ,assign)SEL selector;
@property (nonatomic ,weak) id object;
@property (nonatomic ,copy) OperationBlock block;
@property (nonatomic ,strong) NSOperationQueue *operationQueue;
@end
网友评论