dispatch_once在tweak.m和应用代码中执行了两次

时间:2018-12-13 02:28:57

标签: ios jailbreak theos logos

所以我写了一个简单的调整,将使用ActiveManager的默认管理器:

static ActiveManager *_instance;
static dispatch_once_t once;
+ (instancetype)defaultManager {

    dispatch_once(&once, ^{
        DDLog(@"creating default active manager");
        _instance = [[ActiveManager alloc] init];
    });
    return _instance;
}

在tweak.xm中,它将获取实例

在我的测试应用程序代码中,我还将获得此默认管理器,但我发现执行了dispatch_once两次,并给出了两个地址:

加载调整项时: +[ActiveManager defaultManager]_block_invoke:27 creating default active manager 地址是

  

ActiveManager:0x17003b700

加载应用程序视图控制器时: MITestClient[3011:1276185] +[ActiveManager defaultManager]_block_invoke:27 creating default active manager <ActiveManager: 0x17003ea80>

我不明白,因为调整的dylib与测试应用程序处于同一过程中。为什么dispatch_once执行两次?

0 个答案:

没有答案