美文网首页
iOS NSNotificationCenter_应用启动注册通

iOS NSNotificationCenter_应用启动注册通

作者: Dosun | 来源:发表于2017-06-28 16:23 被阅读45次

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

    一、注册通知

    //增加监听者
     [[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;
    }
    

    相关文章

      网友评论

          本文标题:iOS NSNotificationCenter_应用启动注册通

          本文链接:https://www.haomeiwen.com/subject/uowscxtx.html