Я использую один и тот же код в двух платформах iOS и macOSX для тестирования, просмотра переключателя активности Runloop, обнаружил, что результаты двух платформ не совпадают, в чем причина.s
Код:
1.создать RunLoop Observer
CFRunLoopObserverContext context = {0,(__bridge void*)self, NULL, NULL, NULL};
_observer = CFRunLoopObserverCreate(kCFAllocatorDefault,
kCFRunLoopAllActivities,
YES,
0,
&runLoopObserverCallBack,
&context);
CFRunLoopAddObserver(CFRunLoopGetMain(), _observer, kCFRunLoopCommonModes);
2. состояние активности печати
static void runLoopObserverCallBack(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info){
Monitor *monitor = (__bridge Monitor*)info;
switch (activity) {
case kCFRunLoopEntry:
NSLog(@"activity_kCFRunLoopEntry");
break;
case kCFRunLoopBeforeTimers:
NSLog(@"activity_kCFRunLoopBeforeTimers");
break;
case kCFRunLoopBeforeSources:
NSLog(@"activity_kCFRunLoopBeforeSources");
break;
case kCFRunLoopBeforeWaiting:
NSLog(@"activity_kCFRunLoopBeforeWaiting");
break;
case kCFRunLoopAfterWaiting:
NSLog(@"activity_kCFRunLoopAfterWaiting");
break;
case kCFRunLoopExit:
NSLog(@"activity_kCFRunLoopExit");
break;
default:
break;
}}
Результат:
1.iOS
Результат iOS
2.macOS
MacOS Результат
Почему в системе MacOS есть несколько kCFRunLoopEntry?