Почему CFRunLoopActivity ведет себя по-разному в iOS и MacOS? - PullRequest
0 голосов
/ 01 июля 2018

Я использую один и тот же код в двух платформах 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?

...