遅延実行関数performSelectorおよびcancelPreviousPerformRequestsWithTargetのキャンセルに関するiOS

  1. @interface NSObject(NSDelayedPerforming)  
  2.   
  3. -(void )performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;  
  4. -(void )performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;  
  5. +(void )cancelPreviousPerformRequestsWithTarget:(id)aTargetセレクター:(SEL)aSelectorオブジェクト:(id)anArgument;  
  6. +(void )cancelPreviousPerformRequestsWithTarget:(id)aTarget;  
  7.   
  8. @終わり  


最近、cancelPreviousPerformRequestsWithTargetがパラメーターをキャンセルできないことを確認しました-
(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
状況、私は小さなコードを記述してデバッグしました。パラメータを使用する場合、キャンセル時のパラメータは一貫している必要があります。そうでない場合、キャンセルは成功しません。
遅延実行を開始します。

  1. [self performSelector:@selector(didRuninCurrModel :) withObject:[NSNumber numberWithBool:YES] afterDelay:3.0f];  
  2.   
  3. [self performSelector:@selector(didRuninCurrModelNoArgument)withObject:nil afterDelay:3.0f];  

次のキャンセル方法を3秒以内に実行すると、結果は次のようになります。

  1. [NSObject cancelPreviousPerformRequestsWithTarget:selfセレクター:@selector(didRuninCurrModel :)オブジェクト:[NSNumbernumberWithBool:YES]]; //取取消話。  
  2.   
  3. [NSObject cancelPreviousPerformRequestsWithTarget:selfセレクター:@selector(didRuninCurrModel :)オブジェクト:[NSNumbernumberWithBool:NO]]; //正常にキャンセルできません。パラメータが一致しません  
  4.   
  5. [NSObject cancelPreviousPerformRequestsWithTarget:selfselector:@selector(didRuninCurrModel :) object:nil]; //正常にキャンセルできません。パラメータが一致しません  
  6.   
  7. [NSObject cancelPreviousPerformRequestsWithTarget:selfセレクター:@selector(didRuninCurrModelNoArgument)object:nil]; //正常にキャンセルできます  
  8.   
  9. [NSObject cancelPreviousPerformRequestsWithTarget:self]; //すべてを正常にキャンセルできます。  
  10. [[self  class ] cancelPreviousPerformRequestsWithTarget:self]; //すべてを正常にキャンセルできます。  

おすすめ

転載: blog.csdn.net/wu347771769/article/details/76056589