Objective c 应用程序检索iCloud图像后,iCloud图像是否缓存在iOS设备中?

Objective c 应用程序检索iCloud图像后,iCloud图像是否缓存在iOS设备中?,objective-c,ios,uitableview,icloud,Objective C,Ios,Uitableview,Icloud,我有一个简单的UITableView,其中每个单元格都有一张用户可能用iOS设备摄像头拍摄的缩略图 如果iCloud已启用,则图像将保存在其中。然而,我想知道在加载图像时是否会发生某种缓存,因为我注意到第一次加载时速度很慢,即使在屏幕上显示单元格时再次调用代码,图像也会显示得很快 这是相关的代码片段,我省略了构建单元的逻辑,我认为它不相关,因为问题是关于其他方面的: - (UITableViewCell *)tableView:(UITableView *)table cellForRowAtI

我有一个简单的UITableView,其中每个单元格都有一张用户可能用iOS设备摄像头拍摄的缩略图

如果iCloud已启用,则图像将保存在其中。然而,我想知道在加载图像时是否会发生某种缓存,因为我注意到第一次加载时速度很慢,即使在屏幕上显示单元格时再次调用代码,图像也会显示得很快

这是相关的代码片段,我省略了构建单元的逻辑,我认为它不相关,因为问题是关于其他方面的:

- (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // logic for retrieve data and build cell

    NSURL *ubiquityUrl = [fm URLForUbiquityContainerIdentifier:nil];
    NSURL *docURL = [ubiquityUrl
                     URLByAppendingPathComponent:[NSString stringWithFormat:@"P_%@_%@.jpg",imgId,@"thumbnail"]
                     isDirectory:NO];
    // this a custom object extending UIDocument
    IP2DataDocument *dataDocument = [[IP2DataDocument alloc] initWithFileURL:docURL];

    [dataDocument openWithCompletionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"iCloud document opened");
            // logic for filling table cell picture 
        } else {                
            NSLog(@"failed opening document from iCloud");                
        }


       }];

    // returning cell
}
我可以在Xcode中看到“iCloud文档已打开”,每次都显示该单元格。
如果出现某种缓存,您能指出缓存的位置和方式吗?

这是您的docURL或

NSURL *ubiquityUrl = [fm URLForUbiquityContainerIdentifier:nil];

您无法直接访问iCloud。您可以访问启用iCloud的等效本地位置(ubiquityUrl)。如果您尝试获取的文件尚未在本地下载,则本地iCloud守护进程将在您访问时下载该文件。一旦发生这种情况,它将本地存储在您的设备中。所以下一次,您尝试使用docURL再次访问它,因为这会更快。iCloud守护进程还负责同步文档的版本。因此,如果其他人从其他设备更新了同一文档的较新版本,您无需担心。

这是您的docURL或

NSURL *ubiquityUrl = [fm URLForUbiquityContainerIdentifier:nil];
您无法直接访问iCloud。您可以访问启用iCloud的等效本地位置(ubiquityUrl)。如果您尝试获取的文件尚未在本地下载,则本地iCloud守护进程将在您访问时下载该文件。一旦发生这种情况,它将本地存储在您的设备中。所以下一次,您尝试使用docURL再次访问它,因为这会更快。iCloud守护进程还负责同步文档的版本。因此,如果其他人从另一台设备更新了同一文档的较新版本,您无需担心。

运行元数据查询以了解应用程序的iCloud文档时,查询结果是文档文件的占位符项(
NSMetadataItem
objects)。这些项包含有关文件的元数据,例如其URL和修改日期。文档文件不在iCloud容器目录中

在发生以下情况之一之前,不会下载文档的实际数据:

  • 应用程序尝试打开或访问该文件,例如通过调用
    openWithCompletionHandler:
  • 应用程序调用
    NSFileManager
    方法
    startdownloadingbiquitousitemature:error:
    ,显式下载数据
总而言之:第一次打开文档时,它可能还没有从iCloud下载,这就是为什么需要更长时间。之后,文件有一个本地副本,显然读取速度更快。

说明:

运行元数据查询以了解应用程序的iCloud文档时,查询结果是文档文件的占位符项(
NSMetadataItem
objects)。这些项包含有关文件的元数据,例如其URL和修改日期。文档文件不在iCloud容器目录中

在发生以下情况之一之前,不会下载文档的实际数据:

  • 应用程序尝试打开或访问该文件,例如通过调用
    openWithCompletionHandler:
  • 应用程序调用
    NSFileManager
    方法
    startdownloadingbiquitousitemature:error:
    ,显式下载数据
总而言之:第一次打开文档时,它可能还没有从iCloud下载,这就是为什么需要更长时间。之后,文件有一个本地副本,显然读取速度更快