iOS と macOSX の 2 つのプラットフォームで同じコードを使用してテストし、Runloop のアクティビティ スイッチを表示すると、2 つのプラットフォームの結果が同じではないことがわかりました。その理由は何ですか。
コード:
1.RunLoop オブザーバーの作成
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 があるのはなぜですか?