我有一些方法可以在某些情况下改变UI。
例如:
-(void) myMethod {
if(someExpressionIsTrue) {
// make some UI changes
// ...
// show actionSheet for example
}
}
有时myMethod
来自某些mainThread
来自other thread
。
这就是我希望在mainThread
。
我用这种方式更改了myMethod
所需的部分:
if(someExpressionIsTrue) {
dispatch_async(dispatch_get_main_queue(), ^{
// make some UI changes
// ...
// show actionSheet for example
});
}
所以问题:
dispatch_async(dispatch_get_main_queue()
是安全且良好的解决方案吗?它会影响性能吗?[NSThread isMainThread]
方法检查它是否是主线程,并且仅在以下情况下调用dispatch_async
其他线程,但它会让我用这些UI更新再创建一个方法或块。答案 0 :(得分:37)
在主队列中从主队列中添加异步块没有问题,它所做的就是稍后在运行循环中运行该方法。
你绝对不想做的是调用dispatch_sync
从主队列中向主队列添加一个块,因为你最终会锁定自己。
答案 1 :(得分:6)
如果您在主线程中调用dispatch_async,请不要担心。 iOS会将该块放入队列并在主线程中执行该块。