ios – 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来实现吗?或者我必须将自己的原子标志添加到imageView对象,并在调用imageView.image = image之前检查是否设置了标志;

解决方法

要使用GCD来实现它,你必须使用自己的原子旗.

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

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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...