所以我写了一个简单的调整,将使用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执行两次?