2

特定の遅延後に特定のメソッドを呼び出そうとする iPhone アプリケーションを開発しています。しかし、メソッドは呼び出されていません。呼び出されない理由がわかりません。

これが私のコードです

-(void)gettingCommentsList { //    some stuff....

    [self performSelector:@selector(callGetListInBackgroundMethod) withObject:nil afterDelay:1.0]; }

-(void)callGetListInBackgroundMethod {
    isFromthread =YES;


     NSLog(@"callGetListInBackground");
    dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // Add code here to do background processing
        //
        //

        [self gettingCommentsList];
        dispatch_async( dispatch_get_main_queue(), ^{
            // Add code here to update the UI/send notifications based on the
            // results of the background processing

            [self.commentsTbl reloadData];
        });
    });



}

ありがとう

4

3 に答える 3

3

潜在的な問題の 1 つは、タイマーが始動する前にスレッドが終了するのをタイマーが防げないことです。そのため、( を呼び出すスレッドの) 実行ループに-performSelector:withObject:afterDelay:他のソース (作業) がない場合、1 秒以上実行を継続できず、タイマーが起動する前にスレッドが終了します (そしてカスタム作業が実行されます)。

セカンダリ スレッドでタイマーをスケジュールすれば、それは確かに可能です。

この設計の理由は、タイマーが繰り返し (またはそうでない) ように構成されている可能性があるためだと思います。これらの繰り返しタイマーは決して無効にならないため、多くの人が「ゾンビ」スレッドになってしまいます。この問題は、大量のシステム リソースを簡単に食いつぶす可能性があります。

于 2013-08-28T08:21:01.870 に答える
0

[NSObject cancelPreviousPerformRequestsWithTarget:self] を呼び出していないことを確認してください

于 2013-08-28T08:07:57.970 に答える