我有在表格 View 单元格中加载图像的常规代码
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSImage *image = file.image;
dispatch_async(dispatch_get_main_queue(), ^{
imageView.image = image;
});
});
问题是当我滚动得太快时,我可以看到最后一个 block 在同一个 imageView
上多次触发。这看起来真的很奇怪。有什么办法可以在安排新操作之前取消所有以前为一个 imageView
安排的操作(假设它们都将具有唯一 ID)?
我的意思是,我想确保只执行最后一个计划的操作,并且所有之前计划的操作都应该被删除。这可以通过 Grand Central Dispatch
实现吗?或者我必须将自己的原子标志添加到 imageView 对象,并在调用 imageView.image = image;
最佳答案
要使用 GCD 来实现它,您必须使用自己的原子标志。
但是有一个更好的解决方案,您可以立即取消任务。它是一个 NSOperationQueue。
您可以在此链接下阅读所需的一切:http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues
关于ios - GCD取消异步 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21795882/