我有一個需要寫入/讀取圖像的文件緩存。清理隊列中所有其他請求的GCD隊列
所有與我需要在後臺執行的文件系統的工作。
爲了這個目的,用於保存文件我用:
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中尋找解決方案,但不幸的是無法實現它們。誰能幫我這個?
難道你不是指「緩存」而不是「現金」? – Koen 2014-08-28 15:05:07
是的,抱歉,En不是我的母語 – ShurupuS 2014-08-29 04:33:45
不用擔心,也不是我的:)我以爲這是一個有趣的錯字! – Koen 2014-08-29 10:34:31