我有一个文件缓存,我需要在其中写入/读取图像。
我需要在后台执行文件系统的所有工作。
为了保存我使用的文件:
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中查找解决方案,但不幸的是无法实现它们。任何人都可以帮我这个吗?
答案 0 :(得分:0)
你可以使用NSOperationQueue和maxConcurrentOperationCount = 1(它将建立一个串行队列)来运行NSOperation来加载你的图像; NSOperation是一个可取消的对象。您还可以在操作之间建立依赖关系。
P.S。 您可以查看SDWebImage,它包含SDImageCache类。它类非常适合管理图像缓存。