Почему CFRunLoopActivity работает по-разному в iOS и MacOS?

Я использую один и тот же код на двух платформах iOS и macOSX для тестирования, просмотра переключателя активности Runloop, обнаружил, что результаты двух платформ не совпадают, в чем причина.

Код:

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?

Потому что у него другая реализация на iOS; Исключения по той же причине приводят к сбою программ iOS, но прерывают только текущий цикл выполнения в macOS. Эти звонки не обещают быть в определенном порядке; это деталь реализации, и они внесли множество изменений, когда создавали ее для iOS (гораздо больше основанной на GCD, который был довольно новым в то время). Но ответ - «потому что они разные».

Rob Napier 01.07.2018 16:33

@RobNapier Спасибо, очевидно, из-за их разных реализаций, но я хочу знать их разные детали

Stephen Lee 01.07.2018 16:51

Это внутренние детали реализации. Это вся информация: opensource.apple.com/source/CF/CF-1153.18/CFRunLoop.c.auto.h‌ tml (только на Mac; iOS никогда не выпускала исходный код для CoreFoundation, а Mac остановился несколько лет назад). Дело в том, что это не то, на что можно положиться, и отличается, потому что разные реализации. Я не думаю, что есть более глубокий ответ, кроме того, что люди просто догадываются о реализации на основе поведения. Если вы считаете, что это нарушает документацию, используйте bugreport.apple.com, но я не думаю, что на ваш вопрос есть ответ.

Rob Napier 01.07.2018 17:10

С помощью Hopper (hopperapp.com) вы можете гораздо больше узнать, чем они отличаются друг от друга, но нет никаких обещаний, что это не изменится в будущих выпусках.

Rob Napier 01.07.2018 17:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
119
0

Другие вопросы по теме