给定一个必须在主线程上执行的方法:
-(void)methodRequiringMainThread{
int a=1;
}
和来电者:
-(void)callerToMethod{
if(![NSThread isMainThread]){
dispatch_sync(dispatch_get_main_queue(), ^{[self methodRequiringMainThread]});
} else {
[self methodRequiringMainThread];
}
}
确保在主线程上调用该方法的最佳做法是什么?
我发现问题依赖于#1 +#3,我不喜欢它,因为你无法测试一个很少在另一个线程上结束的来电者。
我也不喜欢它,因为没有特定的功能可以在方法签名中向调用者透露这个要求 - 它(一个重要的)半秘密。
我更喜欢使用#2(或者只是在内部包装内容并检查内容),因为无论调用者如何,它都能保证主线程。
UIKit似乎也没有做任何明确的检查或曝光,这在这一点上很奇怪。看起来应该有一些内置的功能,即使它只是内部的XCode,它通信和/或保证线程。