外部SDK初始化为didFinishLoadingWithOptions

时间:2014-07-14 09:40:52

标签: ios objective-c nsnotificationcenter

我必须保持AppDelegate课程完整(我不拥有),所以我无法将我的SDK初始化为didFinishLaunchingWithOptions的一部分,但我想要类似的效果

基本上我只能向项目中添加文件而不改变它们(这就是为什么我使用+load函数)

安全(并被认为是一种良好做法):

  1. 在objective-c NSNotificationCenter
  2. 期间注册UIApplicationDidBecomeActiveNotification +load
  3. 触发SDK初始化代码(在dispatch_once谓词下)
  4. 以下是代码:

    +(void) load{
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(applicationDidBecomeActiveNotification:)
                                                     name:UIApplicationDidBecomeActiveNotification
                                                   object:nil];
    }    
    + (void)applicationDidBecomeActiveNotification:(NSNotificationCenter *)notification{
        [[NSNotificationCenter defaultCenter] removeObserver:self];
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
    
          // ran some SDKs initializations code
        });
    }
    

1 个答案:

答案 0 :(得分:0)

AppDelegate中有一个方法,当应用程序变为活动状态时,该方法已被调用:

- (void)applicationDidBecomeActive:(UIApplication *)application;

因此,不,这不是一个好习惯。

此外,您正在以观察员身份注册该课程。这样的事情应该由一个类的实例来完成,例如AppDelegate。