0

UIDocumentsaveToURL:forSaveOperation:completionHandler:假设是异步的(在文档中,它说它在后台队列上执行此操作),但我的代码在调用它时有 7-10 秒的延迟。

这是代码:

NSLog(@"saving image...");
[picDoc saveToURL:[picDoc fileURL] 
 forSaveOperation:UIDocumentSaveForCreating 
completionHandler:^(BOOL success) {


    dispatch_async(dispatch_get_main_queue(), ^{
        if (success) {
            NSLog(@"image save successful!");
            UIImage *thumbnail = [image imageByScalingAndCroppingForSize:CGSizeMake(146, 110)];
            Picture *picture = [[Picture alloc] initWithThumbnail:thumbnail filename:fileName];
            [[set pictures] addObject:picture];




            [self setupPictures];

            [scrollView scrollRectToVisible:((UIView *)[[scrollView subviews] lastObject]).frame animated:YES];
            currentIndex = [[set pictures] count] - 1;
            [self showPicture];

        } else {
            NSLog(@"failed saving image");
        }
        [SVProgressHUD dismiss];
    });

    [picDoc closeWithCompletionHandler:nil];
}];
NSLog(@"exit");

和控制台:

2012-05-15 07:07:27.417 Picventory[5939:707] saving image...
2012-05-15 07:07:34.120 Picventory[5939:707] exit
2012-05-15 07:07:34.740 Picventory[5939:707] image save successful!

为什么异步调用会有这么大的延迟?谢谢

4

1 回答 1

1

将文件写入磁盘是异步的,但获取文档数据的快照不是。您应该使用 Instruments 中的 Time Profiler 来找出实际需要这么长时间的原因。我猜您可能需要优化您的contentsForType:error:(或等效的)方法,但首先要测量!

于 2012-05-15T11:16:36.660 回答