中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS中延時執行的幾種方式比較及匯總

發布時間:2020-09-30 08:40:52 來源:腳本之家 閱讀:896 作者:wide288 欄目:移動開發

前言

在開發過程中,我們有時會希望把一些操作封裝起來延遲一段時間后再執行。本文列舉了四種延時執行某函數的方法及其一些區別。假如延時1秒時間執行下面的方法。

- (void)delayMethod { NSLog(@"execute"); }

1.performSelector方法

這是iOS中常用的一種延遲執行方法.

   //不帶參數
   [self performSelector:@selector(delayDo:) withObject:nil afterDelay:1.0f];
   //帶參數
   [self performSelector:@selector(delayDo:) withObject:@"abc" afterDelay:1.0f];

此方式要求必須在主線程中執行,否則無效。

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

暫時未找到取消執行的方法。

2.定時器:NSTimer

采用計時器的延遲方法

[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];

此方式要求必須在主線程中執行,否則無效。

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

可以通過NSTimer類的- (void)invalidate;取消執行。

3. sleep方式

[NSThread sleepForTimeInterval:1.0f]; [self delayMethod];

此方式在主線程和子線程中均可執行。

是一種阻塞的執行方式,建方放到子線程中,以免卡住界面

沒有找到取消執行的方法。

最好不要在主線程中使用,否則會卡住界面.

4.GCD方式

//在主線程延遲執行  
 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
   [self delayDo:@"GCD"];
   });
//在子線程延遲執行
   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"];
   });

此方式在可以在參數中選擇執行的線程。

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

沒有找到取消執行的方法。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汕头市| 邓州市| 昌平区| 米易县| 大邑县| 扶余县| 宁国市| 彭水| 金溪县| 绥化市| 德钦县| 台州市| 县级市| 龙游县| 景德镇市| 昔阳县| 南京市| 永城市| 社旗县| 白玉县| 织金县| 卓尼县| 秦安县| 玉门市| 红原县| 西峡县| 砀山县| 柏乡县| 玉龙| 商洛市| 霍邱县| 新宾| 大埔县| 兴隆县| 普格县| 长汀县| 桃园市| 宜丰县| 宕昌县| 磴口县| 莱州市|