2

X 秒ごとに「更新」を実行する特定のオブジェクトがあります。("The Updater") 私がこの反復的な更新を行う方法は、呼び出すことperformSelector:withObject:afterDelayであり、セレクターで必要に応じて再スケジュールしています。

もちろん、 を呼び出してこれらの呼び出しを停止する方法がありcancelPreviousPerformRequestsます。

問題は、この「アップデーター」の割り当てが決して解除されないことです。Updater (AFAIK) を保持しているオブジェクトは他に 1 つだけあり、保持しているオブジェクト割り当てが解除され、呼び出しが行われています。[self setUpdater:nil];

これはメソッドと関係があると思われますperformSelector:withObject:afterDelayが、ドキュメントでその質問への参照が見つかりませんでした。

誰でもそれを確認または却下できますか?

ありがとう!

APPENDIX スケジューリング方法は次のとおりです。

-(void) scheduleProgressUpdate
{
    [self stopProgressUpdates]; // To prevent double scheduling
    [self performSelector:@selector(updateProgress) 
               withObject:nil 
               afterDelay:1.0];
}

-(void) updateProgress
{
    // Perform update..
    [self scheduleProgressUpdate];
}

-(void) stopProgressUpdates
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self 
                                             selector:@selector(updateProgress) 
                                               object:nil];
}
4

1 に答える 1

2

私の知る限り、 performSelector メソッドはそのレシーバーと引数を保持しています。

于 2012-06-07T09:28:09.940 に答える