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