iOS開發中方法延遲執行的幾種方式


概述

項目開發中經常會用到方法的延時調用,下面列舉常用的幾種實現方式:

1.performSelector

2.NSTimer

3.NSThread線程的sleep

4.GCD

1.performSelector

[self performSelector:@selector(delayMethod) withObject:nil/*可傳任意類型參數*/ afterDelay:2.0];

此方法是一種非阻塞的執行方式。
取消方法:

第一種:
/**
 *  取消延遲執行
 *
 *  @param aTarget    一般填self
 *  @param aSelector  延遲執行的方法
 *  @param anArgument 設置延遲執行時填寫的參數(必須和上面performSelector方法中的參數一樣)
 */
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;

第二種:
//撤回全部申請延遲執行的方法
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;

上面2種都是類方法,不能用實例對象去調用,只能用NSObject。
eg:
[NSObject cancelPreviousPerformRequestsWithTarget:self];

2.NSTimer定時器

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];

此方法是一種非阻塞的執行方式
取消執行方法:[time invalidate];

3.NSThread線程的sleep

[NSThread sleepForTimeInterval:2.0];

此方法是一種阻塞執行方式,建議放在子線程中執行,否則會卡住界面。但有時還是需要阻塞執行,如進入歡迎界面需要沉睡3秒才進入主界面時。
沒有找到取消執行方式。

4.GCD

__block ViewController *weakSelf = self;
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC));

dispatch_after(delayTime, dispatch_get_main_queue(), ^{
    [weakSelf delayMethod];
});

此方法可以在參數中選擇執行的線程,是一種非阻塞執行方式。因為該方法交給了GCD自動處理,因此不容易取消操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM