- @interface NSObject(NSDelayedPerforming)
-
- -(void )performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;
- -(void )performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
- +(void )cancelPreviousPerformRequestsWithTarget:(id)aTargetセレクター:(SEL)aSelectorオブジェクト:(id)anArgument;
- +(void )cancelPreviousPerformRequestsWithTarget:(id)aTarget;
-
- @終わり
最近、cancelPreviousPerformRequestsWithTargetがパラメーターをキャンセルできないことを確認しました-
(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
状況、私は小さなコードを記述してデバッグしました。パラメータを使用する場合、キャンセル時のパラメータは一貫している必要があります。そうでない場合、キャンセルは成功しません。
遅延実行を開始します。
- [self performSelector:@selector(didRuninCurrModel :) withObject:[NSNumber numberWithBool:YES] afterDelay:3.0f];
-
- [self performSelector:@selector(didRuninCurrModelNoArgument)withObject:nil afterDelay:3.0f];
次のキャンセル方法を3秒以内に実行すると、結果は次のようになります。
- [NSObject cancelPreviousPerformRequestsWithTarget:selfセレクター:@selector(didRuninCurrModel :)オブジェクト:[NSNumbernumberWithBool:YES]];
-
- [NSObject cancelPreviousPerformRequestsWithTarget:selfセレクター:@selector(didRuninCurrModel :)オブジェクト:[NSNumbernumberWithBool:NO]];
-
- [NSObject cancelPreviousPerformRequestsWithTarget:selfselector:@selector(didRuninCurrModel :) object:nil];
-
- [NSObject cancelPreviousPerformRequestsWithTarget:selfセレクター:@selector(didRuninCurrModelNoArgument)object:nil];
-
- [NSObject cancelPreviousPerformRequestsWithTarget:self];
- [[self class ] cancelPreviousPerformRequestsWithTarget:self];