首頁 常見問題 iOS幾種延遲執行方法

iOS幾種延遲執行方法

Dec 24, 2019 am 09:43 AM
ios

iOS幾種延遲執行方法

在專案開發中經常會用到方法的延時調用,具體的調用場景不做贅述,以下列舉現有的幾種實現方式:

方法一:performSelector                        (建議學習:phpstorm

[self performSelector:@selector(delayMethods) withObject:nil afterDelay:1.0];
登入後複製

#

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayMethods) object:nil];
登入後複製

#
[NSObject cancelPreviousPerformRequestsWithTarget:self];
登入後複製
非阻塞執行方式,不會影響其他程序;必須在主執行緒中執行;

可以主動取消操作:

NSTimer *timer =  [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(delayMethods) userInfo:nil repeats:NO];
登入後複製
如果要取消目前所有延時操作:

[timer invalidate];
登入後複製

註:該方法不夠安全,這個方法在呼叫時會設定目前runloop中的timer。但我們知道:只有主執行緒會在創建的時候預設自動執行一個runloop,並且含有timer,普通的子執行緒是沒有runloop和timer的。

所以在子執行緒中被呼叫的時候,我們的程式碼中延時操作的程式碼就會一直等待timer得調度,但是實際上子執行緒中沒有timer,這就會導致我們的延時操作程式碼永遠不會被執行。

方法二:NSTimer

[NSThread sleepForTimeInterval:1.0];
登入後複製
分析:

此方法是一種非阻塞執行方式,不會影響其他行程;必須在主執行緒中執行;預設為在主執行緒中設定一個定時器;可以設定是否重複執行延時操作;

#取消延時操作:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self delayMethods];
});
登入後複製
註:

若repeats參數設定為NO,執行完成後timer會自動銷毀,若repeats參數設定為YES,執行完成後,必須手動呼叫[timer invalidate]才能銷毀定時器;

方法三:sleep

dispatch_queue_t queen = dispatch_get_global_queue(0, 0);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), queen, ^{
[self delayMethods];
});
登入後複製
分析:

這個方法是一種阻塞執行方式,最好放在子執行緒執行,否則會影響其他方法的執行。

方法四:GCD

__weak typeof(self) ws = self;
dispatch_queue_t queen = dispatch_get_global_queue(0, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queen);
if (timer) {
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 1.0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
[ws delayMethods];
});
dispatch_resume(timer);
}
登入後複製
分析:此方法是一種非阻塞執行方式,不會影響其他進程;可以在參數中設定執行的進程:

rrreee也可以設定是否重複執行:

rrreee註:

因為方法交給了GCD自動處理,因此不容易取消操作###

以上是iOS幾種延遲執行方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

蘋果iOS 18首版被曝Bug多到飛起:發熱嚴重 微信延遲 蘋果iOS 18首版被曝Bug多到飛起:發熱嚴重 微信延遲 Jun 13, 2024 pm 09:39 PM

一年一度的WWDC已經結束,iOS18無疑是大家關注的一大焦點。目前有許多iPhone用戶都搶先升級到了iOS18,但各種系統Bug讓人難受。有部落客表示,升級iOS18要謹慎,因為「Bug多到飛起」。部落客表示,如果你的iPhone是主力機,建議不要升級iOS18,因為第一版的Bug非常多。他也彙整了幾個目前遇到的系統Bug:1、切換圖示樣式卡頓,導致圖示不顯示2、手電筒示寬動畫經常遺失3、抖音App上傳不了影片4、微信訊息延遲10s左右推送5 、電話偶爾打不出去,顯示黑屏6、發熱嚴

蘋果重發 iOS / iPadOS 18 Beta 4 更新,版本號升至 22A5316k 蘋果重發 iOS / iPadOS 18 Beta 4 更新,版本號升至 22A5316k Jul 27, 2024 am 11:06 AM

感谢网友吉茵珂絲、xxx_x、番茄炒西红柿、Terrence、香辣鸡腿堡的线索投递!7月27日消息,苹果公司今天面向开发者,重新发布了iOS/iPadOS18Beta4更新,内部版本号从22A5316j升级到22A5316k,目前尚不清楚两个Beta4版本更新之间的区别。已经注册的开发者可以打开“设置”应用程序,进入“软件更新”部分,点击“测试版更新”选项,然后切换iOS18/iPadOS18开发者测试版设置来选择测试版。下载并安装测试版需要与开发者账户关联的AppleID。7月24日报道,iO

蘋果發布用於同態加密的開源 Swift 軟體包,已部署在 iOS 18 中 蘋果發布用於同態加密的開源 Swift 軟體包,已部署在 iOS 18 中 Jul 31, 2024 pm 01:10 PM

7月31日消息,蘋果昨天(7月30日)發布新聞稿,宣布推出新的開源Swift包(swift-homomorphic-encryption),用於在Swift程式語言中啟用同態加密。註:同態加密(HomomorphicEncryption,HE)是指滿足密文同態運算性質的加密演算法,即資料經過同態加密之後,對密文進行特定的計算,得到的密文計算結果在進行對應的同態解密後的明文等同於明文資料直接進行相同的計算,實現資料的「可算不可見」。同態加密技術可以計算加密數據,而且不會向操作過程洩漏底層的未加

更新 |駭客解釋如何在歐盟以外的 iPad 上安裝 Epic Games Store 和 Fortnite 更新 |駭客解釋如何在歐盟以外的 iPad 上安裝 Epic Games Store 和 Fortnite Aug 18, 2024 am 06:34 AM

更新:Saunders Tech 已將教學上傳到他的 YouTube 頻道(下面嵌入影片),解釋如何在歐盟境外的 iPad 上安裝 Fortnite 和 Epic Games Store。然而,該過程不僅需要特定的 iO 測試版

蘋果 iOS 18「無邊記」應用新功能:擴充 Scenes 功能、引入網格對齊 蘋果 iOS 18「無邊記」應用新功能:擴充 Scenes 功能、引入網格對齊 Jun 02, 2024 pm 05:05 PM

6月1日消息,科技媒體AppleInsider今天發布博文,表示蘋果將會在iOS18系統中,為「無邊記」(Freeform)應用程式擴充推出「Scenes」的全新導航功能,並新增物件對齊的新選項。 「無邊記」應用簡介先簡單介紹下「無邊記」應用,應用於2022年推出,目前已推出iOS、iPadOS、macOS15以及visionOS版本。蘋果官方介紹如下:「無邊記」是讓靈感變成現實的絕佳工具。在支援幾乎所有文件類型的靈活畫布上勾勒項目草圖、設計心情看板或開始腦力激盪。借助iCloud,所有看板

蘋果 iOS 17.5 RC 版發布:允許歐盟 iPhone 用戶從網站下載應用 蘋果 iOS 17.5 RC 版發布:允許歐盟 iPhone 用戶從網站下載應用 May 08, 2024 am 09:30 AM

【點此直達升級教學】5月8日訊息,蘋果今日向iPhone用戶推送了iOS17.5RC更新(內部版本號:21F79),這次更新距離上次發布隔了70天。如何升級iOS/iPadOS/watchOS/macOS開發版和公測版?升級iOS/iPadOS17開發者預覽版及公測版,可參考家友分享經驗:經驗貼一||經驗貼二||經驗貼三||經驗貼四。從iOS/iPadOS16.4開發者預覽版Beta1開始,需要註冊蘋果開發者計劃,註冊後開啟系統【設定】【軟體更新】即可看到升級選項。需注意,你的iPhone或iP

蘋果 iOS / iPadOS 18 開發者預覽版 Beta 4 發布:新增 CarPlay 桌布、梳理設定選項、增強相機控制 蘋果 iOS / iPadOS 18 開發者預覽版 Beta 4 發布:新增 CarPlay 桌布、梳理設定選項、增強相機控制 Jul 24, 2024 am 09:54 AM

感謝網友辣雞腿堡、軟媒新友2092483、手寫的從前、DingHao、小星_14、窩窩頭吃大口、非影Q、軟媒新友2168428、Slades、Aaron212、快樂小刺蝟、小伯爵、吃魚的小奶貓的線索投遞! 【點此直達升級教學】7月24日訊息,蘋果今日向iPhone和iPad用戶推送了iOS/​​iPadOS18開發者預覽版Beta4更新(內部版本號:22A5316j),這次更新距離上次發布隔了15天。 Carplay壁紙蘋果為CarPlay添加了壁紙,涵蓋淺色和深色兩種模式,其壁紙風格類似於iPhon

iPhone12 ios16要不要更新ios17.5beta3? ios17.5beta3體驗感如何? iPhone12 ios16要不要更新ios17.5beta3? ios17.5beta3體驗感如何? Apr 25, 2024 pm 04:52 PM

實用分享......隨著蘋果不斷推出新的iOS版本,許多iPhone用戶都面臨著是否應該升級系統的選擇。而最新iOS17.5Beta3的發布引起了廣泛關注,尤其對於iPhone12用戶而言,是否應該放棄現有的iOS16,轉而嘗試新的Beta版本,成為了一個值得探討的問題。基於實際體驗,分析iPhone12升級至iOS17.5Beta3的利弊,為廣大果粉們提供參考。首先,我們要先明確的是,Beta版本通常是給開發​​者或願意承擔一定風險的早期體驗者使用的。這意味著,相較於正式版,Beta版本可能包含