dispatch_once выполняется дважды в tweak.m и код приложения - PullRequest
0 голосов
/ 13 декабря 2018

Поэтому я пишу простой твик, который будет использовать менеджер по умолчанию 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 выполняется дважды?

...