1

我的应用程序正在从网络加载一堆图像,并将它们保存到应用程序沙盒环境中的本地文件系统 (FS)。当我将图像保存到 FS 时,我会这样做GCD

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil];
    [UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
});

这很好用。但是,当我尝试同时从 FS 获取/加载此图像(另一个进程需要相同的图像)时,我在检查 FS 上是否存在图像以及它是否可读时遇到问题:

if ([[NSFileManager defaultManager] fileExistsAtPath:path] && [[NSFileManager defaultManager] isReadableFileAtPath:path]) {
    //step 1 - image exists and I can load it from FS
    UIImage *existingImage = [UIImage imageWithData:[NSData dataWithContentsOfFile:path]];
    if (existingImage == nil) {
        NSLog(@"Loaded image is nil!");
    }
}
else {
    //step 2 - image does not exist in local FS and needs to be loaded from network
}

问题是有时我进入第 1 步(文件显然存在并且可读)但加载的“existingImage”为零。

怎么会这样?图像是否可能处于写入过程中?有没有其他方法可以检查图像写入是否 100% 完成并准备好使用?

4

0 回答 0