iOS中延時執(zhí)行的幾種方式比較及匯總
前言
在開發(fā)過程中,我們有時會希望把一些操作封裝起來延遲一段時間后再執(zhí)行。本文列舉了四種延時執(zhí)行某函數(shù)的方法及其一些區(qū)別。假如延時1秒時間執(zhí)行下面的方法。
- (void)delayMethod { NSLog(@"execute"); }
1.performSelector方法
這是iOS中常用的一種延遲執(zhí)行方法.
//不帶參數(shù) [self performSelector:@selector(delayDo:) withObject:nil afterDelay:1.0f]; //帶參數(shù) [self performSelector:@selector(delayDo:) withObject:@"abc" afterDelay:1.0f];
此方式要求必須在主線程中執(zhí)行,否則無效。
是一種非阻塞的執(zhí)行方式,
暫時未找到取消執(zhí)行的方法。
2.定時器:NSTimer
采用計時器的延遲方法
[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];
此方式要求必須在主線程中執(zhí)行,否則無效。
是一種非阻塞的執(zhí)行方式,
可以通過NSTimer類的- (void)invalidate;取消執(zhí)行。
3. sleep方式
[NSThread sleepForTimeInterval:1.0f]; [self delayMethod];
此方式在主線程和子線程中均可執(zhí)行。
是一種阻塞的執(zhí)行方式,建方放到子線程中,以免卡住界面
沒有找到取消執(zhí)行的方法。
最好不要在主線程中使用,否則會卡住界面.
4.GCD方式
//在主線程延遲執(zhí)行 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self delayDo:@"GCD"]; }); //在子線程延遲執(zhí)行 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self delayDo:@"Global-GCD"]; });
此方式在可以在參數(shù)中選擇執(zhí)行的線程。
是一種非阻塞的執(zhí)行方式,
沒有找到取消執(zhí)行的方法。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
iOS自定義UIBarButtonItem的target和action示例代碼
這篇文章主要給大家介紹了關(guān)于iOS自定義UIBarButtonItem的target和action的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-02-02IOS 屏幕適配方案實現(xiàn)縮放window的示例代碼
這篇文章主要介紹了IOS 屏幕適配方案實現(xiàn)縮放window的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04iOS利用Label實現(xiàn)的簡單高性能標簽TagView
這篇文章主要給大家介紹了關(guān)于iOS利用Label實現(xiàn)的簡單高性能標簽TagView的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-03-03IOS 開發(fā)之UILabel 或者 UIButton加下劃線鏈接
這篇文章主要介紹了IOS 開發(fā)之UILabel 或者 UIButton加下劃線鏈接的相關(guān)資料,需要的朋友可以參考下2017-07-07