Dispatch_async和UI

时间:2011-08-25 06:58:58

标签: iphone objective-c dispatch

我发出警报通知用户有关保存操作的信息,我将其添加到视图中,保存一些图像并解除警报。然而,它并没有像我希望的那样工作。首先在控制台中查看下面的代码,我得到“保存...”然后“发送”。我想得到相反的效果首先得到“dispath”然后“保存..”(所以在屏幕上写警报,然后保存在后台,最后解除警报)。但我改变了imageView1的图像,所以我不能移出dispath_async合并,因为它是一个UI动作..然后怎么办呢?我需要首先合并图像并在它之后保存它们以及所有这些计算时间以保持警惕。

//adding alert to view
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), 
^{
    dispatch_async(dispatch_get_main_queue(), ^{
        //i want this to complete->
        imageView1.image = [self merge:imageView1.image and:imageView2.image];
        NSLog(@"dispatch");
    });

    //and then to do this action->
    UIImageWriteToSavedPhotosAlbum(imageView1.image, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
    NSLog(@"saved..");

    dispatch_async(dispatch_get_main_queue(), ^{
        [alert dismissWithClickedButtonIndex:0 animated:YES];
    });
});

1 个答案:

答案 0 :(得分:6)

您应该只使用dispatch_sync代替dispatch_async。在主线程上执行该块之前,该函数不会返回。