7

私のiPhoneアプリには、私ができるいくつかの場所があります

[object performSelector: withObject: afterDelay:]

電話。すべてが同じ方法につながります。さて、そのメソッドで、最後の呼び出しでのみいくつかのコードを実行したいと思います。それが最初の場合は、一[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(thisMethod) object:nil]度だけ呼び出されるようにすることができます。

しかし、実行待ちのメソッド呼び出しが他にあるかどうかを確認する方法はありますか?

このクラスでカウンターを使用して、この実行後遅延を設定するたびにインクリメントし、各呼び出しの開始時にデクリメントして、このカウンターがゼロの場合にのみコードを実行することができます。しかし、それが最善/許容可能なアプローチであるかどうか疑問に思っています...

4

1 に答える 1

6

できることは次のとおりです。電話をかける[object performSelector: withObject: afterDelay:]たびに、上記の行を追加するだけです。実際にそれを処理するメソッドを作成できます。例えば:

- (void)performSelectorOnce:(SEL)selector withObject:(id)object afterDelay:(NSTimeInterval)delay
{
    [NSObject cancelPreviousPerformRequestsWithTarget:object selector:selector object:object];
    [self performSelector:selector withObject:object afterDelay:delay];
}

そして、使用する場所よりも[object performSelector: withObject: afterDelay:][self performSelectorOnce: withObject: afterDelay:]; に置き換えるだけです。

これを複数のオブジェクトで使用したい場合は、実際に NSObject カテゴリを作成してそこにメソッドを追加できます。

これがうまくいくかどうか教えてください。

于 2011-10-05T10:14:54.617 に答える