使用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 (。主要))'。在Objective-C中,基于['[NSThread isMainThread]'](https://developer.apple.com/documentation/foundation/nsthread/1408455-mainmainread)',你很可能会坚持'NSAssert'或'NSLog'。 – Rob