使用后台线程更新 UI 的理想方式是
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
//Background Thread
dispatch_async(dispatch_get_main_queue(), ^(void){
//Run UI Updates
});
});
但是即使不使用主队列,我们也可以更新 UI
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
//Background Thread
//Run UI Updates
});
所以我使用 beizer 路径来绘制一些点,这些点来自 iPad UIPanGestureRecognizer。现在我在主线程上绘制这些点并旋转这些点以获得新点并使用后台线程(并发)绘制这些新点。这是我的代码:
CGPoint touchPoint = [sender locationInView:self.view];
[pencilLayer[0] addPoint:touchPoint];
for(int i = 1; i < 4; i++)
{
dispatch_async(privateQueue, ^{
CGPoint point = Rotatepoint(500, 500, 45(degree), touchPoint);
[pencilLayer[i] addPoint:point];
});
}
我的问题是:主线程和私有队列应该同时在 UI 上绘制。为什么释放手势后,privateQueue 在 UI 上绘制点?