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のTimeProfilerを使用して、実際に非常に時間がかかっているものを見つける必要があります。私はあなたがあなたのcontentsForType:error:(または同等の)方法を最適化する必要があるかもしれないと思いますが、最初に測定してください!

于 2012-05-15T11:16:36.660 に答える