1

コードに問題があり、速度を上げる方法がわかりません。これがアプリデリゲートからの私のコードです(didFinishLaunchingWithOptionsメソッド本体):

initialized = [[NSUserDefaults standardUserDefaults] boolForKey:@"initialized"];

if (!initialized) {
     dispatch_queue_t queue = dispatch_get_global_queue(
                                                       DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);


    dispatch_async(queue, ^{
        [DAO setDocumentsCacheDirectory:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]];

        ....download images and files needed by application

        NSLog(@"%@", @"Finished downloadding images and files");

        [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshView" object:nil];
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"initialized"];
    });
}

この非同期ダウンロードが行われている間、ビューにgif画像が回転しています。ご覧のとおり、このすべてのダウンロードが完了すると、私のViewControllerでrefreshViewメソッドがトリガーされます。

ロードが再ロードを完了した後、NSLog(@ "%@"、@ "Finished reload ..");があります。したがって、ビューがいつ再ロードされたかがわかります。

問題 :

だから私はコンソールを見ています:

2012-06-07 12:52:34.898 TestApp[29800:13c03] Finished downloadding images and files
[Switching to process 29800 thread 0x13c03]
2012-06-07 12:52:34.909 TestApp[29800:13c03] Finished reloading..

ファイルのダウンロードは1、2秒以内に行われるようです。次に、タイムスタンプでわかるように、ビューのリロードが終了した直後。

しかし、アプリケーションは5秒ほど待機し、どこで何が起こっているのかわかりません。メッセージの再読み込みが完了したにもかかわらず、ビューが再更新されます。約5秒前に表示されました。

次に何をしますか?

4

1 に答える 1

5

バックグラウンドキューに通知を投稿しています-これがUIの更新をトリガーするものである場合、これはメインキューで実行する必要があります。

dispatch_async(queue, ^{
    [DAO setDocumentsCacheDirectory:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]];

    ....download images and files needed by application

    NSLog(@"%@", @"Finished downloadding images and files");

    dispatch_sync(dispatch_get_main_queue(), ^{
        [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshView" object:nil];
    }

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"initialized"];
});

ここで使用したことに注意してdispatch_syncください...NSUserDefaultsメインキューブロックが完了するまで更新されません。

于 2012-06-07T11:03:57.670 に答える