iOS 中的幾種延遲呼叫的方法
-
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
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 程式碼會自動生成