繁体   English   中英

清理队列中所有其余请求的GCD队列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM