1. 程式人生 > >iOS 中的幾種延遲呼叫的方法

iOS 中的幾種延遲呼叫的方法

  1.  performSelector方法

    執行方法:

    [self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>];

    取消執行方法:

    [ NSObject cancelPreviousPerformRequestsWithTarget:<#(id)#> selector:<#(SEL)#> object:<#(id)#> ];//這裡的方法是 NSObject的靜態方法

    特點:此方式要求必須在主執行緒中執行,否則無效。

是一種非阻塞的執行方式。

2.  NSTimer

      執行方法:

   NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:<#(NSTimeInterval)#> target:<#(id)#> selector:<#(SEL)#> userInfo:<#(id)#> repeats:<#(BOOL)#>];

   取消方法:

    [timer invalidate];//這裡的是減方法

   特點:此方式要求必須在主執行緒中執行,否則無效。是一種非阻塞的執行方式。

3. NSThread

    執行方法:

    NSThread *thread = [[NSThread alloc]initWithTarget:<#(id)#> selector:<#(SEL)#> object:<#(id)#>];

   [NSThread sleepForTimeInterval:<#(NSTimeInterval)#>];

   [thread start];

   特點:此方式在主執行緒和子執行緒中均可執行。是一種阻塞的執行方式,建議放到子執行緒中。

4. dispatch_after 

double

 delayInSeconds = 2.0;

    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));

    [dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

// <#code to be executed on the main queue after delay#>

    }) ];//敲擊dispatch_after  程式碼會自動生成