[英]Clean GCD queue for all the rest requests in queue
我有一个需要写入/读取图像的文件缓存。
我需要在后台执行的文件系统的所有工作。
为此目的,我使用:
dispatch_barrier_async([AxPanoramaDataManager sharedInstance].dataManagerQueue, ^{
[data writeToFile:tileFilePathName atomically:YES];
});
并阅读:
__block UIImage *tileImage = nil;
dispatch_sync([AxPanoramaDataManager sharedInstance].dataManagerQueue, ^{
tileImage = [[UIImage imageWithContentsOfFile:tileFilePathName] retain];
dispatch_async(dispatch_get_main_queue(), ^{
completion (tileCoordValue, side, tileImage, error);
[tileImage release];
});
});
一切正常,现金文件夹中有大量文件,但有时我需要清理现金。 我需要取消所有队列块,并执行一个清理文件夹的块。
首先,我对该方法的实现如下所示:
+ (void) cleanCash
{
NSString *folderPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingString:@"cash"];
dispatch_sync([AxPanoramaDataManager sharedInstance].dataManagerQueue, ^{
NSError *error = nil;
[[NSFileManager defaultManager] removeItemAtPath:folderPath error:&error];
NSParameterAssert(error == nil);
}
});
}
但是我有很多问题,因为它不能取消队列中所有等待的操作。 我尝试在SO中寻找解决方案,但不幸的是无法实现它们。 谁能帮我这个?
您可以将NSOperationQueue与maxConcurrentOperationCount = 1(将创建一个串行队列)一起使用,以运行NSOperation来加载图像; NSOperation是可取消的对象。 您还可以在操作之间建立依赖关系。
PS可以查看SDWebImage,它包含SDImageCache类。 此类非常适合管理图像缓存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.