GCD取消异步阻止?

我有常规代码用于在表格视图单元格中加载图像

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ NSImage *image = file.image; dispatch_async(dispatch_get_main_queue(), ^{ imageView.image = image; }); }); 

问题是当我滚动太快时,我可以看到最后一个块在同imageView上多次触发。 这看起来很奇怪。 在安排新的一个imageView之前,有没有办法取消一个imageView所有先前计划的操作(假设它们都具有唯一的ID)?

我的意思是,我想确保只应该执行最后一次计划的操作,并且应该删除之前安排的所有操作。 这可能通过Grand Central Dispatch吗? 或者我必须将自己的primefaces标志添加到imageView对象,并在调用imageView.image = image;之前检查是否设置了标志imageView.image = image;

要使用GCD来实现它,你必须使用自己的primefaces旗。

但是有一个更好的解决方案,你可以取消开箱即用的任务。 这是一个NSOperationQueue。

您可以在此链接下阅读所需的一切: http : //www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues

有人已经说过,但是使用[[NSOperationQueue mainQueue] cancelAllOperations]; 在管理密集的网络电话时,取消操作对我来说就像是一种魅力。