iOS NSNotificationCenter_应用启动注册通

2017-06-28  本文已影响45人  Dosun

今天为了解决旧项目藕合度,感觉用前辈是用代理传值,感觉不太合理,因为两个对象本身一点关系都没有,就是想监听内购成功有回调而已。于是乎,就采用通知,但是在通知使用时,碰到坑,后面再细讲。

一、注册通知

//增加监听者
 [[NSNotificationCenter defaultCenter] addObserver:[GDSDKAppsFlyerManager sharedStanderManager] selector:@selector(noticeFromConsoleGameIAP:) name:@"GDIAPStander" object:nil];

//监听到通知时,做相应的动作
-(void)noticeFromNetworkGameIAP:(NSNotification*)info{

}

//取消通知
-(void)dealloc{
   [[NSNotificationCenter defaultCenter] removeObserver:self name:@"GDIAPStander" object:nil];
}

二、发送通知

[[NSNotificationCenter defaultCenter] postNotificationName:@"GDIAPNetwork" object:nil userInfo:infoDict];

三、坑

众所周知,通知是先增加 监听者 才能进行处理通知发送的相应用事件。于是在应用启动(application didFinishLaunchingWith-Options:)时,就已经注册通知,并且已经发送通知,但是并不实现监听通知的方法(noticeFromNetworkGameIAP:),直觉告诉我,一定是线程问题,于是将注册通知 delay 0.25s,果然可以。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [[NSNotificationCenter defaultCenter] addObserver:[GDSDKAppsFlyerManager sharedStanderManager] selector:@selector(noticeFromNetworkGameIAP:) name:@"GDIAPNetwork" object:nil];//GDIAPNetwork
    });
    return YES;
}
上一篇下一篇

猜你喜欢

热点阅读