Xcode 9では、コンパイラがバックグラウンドスレッドからUIKitを呼び出していることが分かると、アナライザーの警告が表示されます。メソッドをメインスレッドとしてマークしますか?
自分の方法でこれを取得する方法はありますか?例えば
:
他の場所@interface MyObject
- (void)doThingOnMainThread NS_MAIN_THREAD_ONLY;
// where NS_MAIN_THREAD_ONLY is a thing I just made up, as far as I know
@end
:
- (void)otherMethod {
MyObject *myObject = [MyObject sharedObject];
dispatch_queue_t queue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
// I'd like a warning here, if possible!
[myObject doThingOnMainThread];
});
}
あなたは、多くの場合、 'dispatchPrecondition(条件を使用したい:.onQueue (.main)) 'となります。 Objective-Cでは、['[NSThread isMainThread]'](https://developer.apple.com/documentation/foundation/nsthread/1408455-ismainthread)に基づいて 'NSAssert'または' NSLog'を実行している可能性があります。 – Rob