我有一个基于某些参数的iPhone应用程序,图像被重新创建。由于此图像重新创建可能需要一些时间,因此我使用单独的线程来创建图像。忽略正在处理请求时调用dispatch_async
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0);
// costly drawing
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^{
self.image = newImage;
});
});
影响该图像的休闲参数可以改变比图像快可以得到重建,所以我想在需要的时候“暂停”娱乐和一次只执行一个这样的dispatch_async电话。
然后,随着更多重新创建图像的请求到达,只能记住最后一个(具有最新的参数),并且只要图像重新创建完成,就会为这些参数启动一个。
无论如何,所有其他调用都不会影响,图像将被覆盖。
达到此目的的最佳方法是什么?
NSOperation和NSOperationQueue怎么样?添加操作,并取消正在进行的操作? – TheBlack 2013-04-30 14:17:33
您是否尝试过使用串行GCD队列而不是全局并行队列? – yaakov 2013-04-30 14:41:19