1. 程式人生 > >iOS-延時執行常見的幾種方法

iOS-延時執行常見的幾種方法

本節主要介紹幾種我們通常用到的實現延時的方法。

延時方法我們統一呼叫- (void)delayMethod

- (void)delayMethod
{
    NSLog(@"delayMethodEnd = %@",[NSThread currentThread]);
}

1.performSelector方法

該方法也是在主執行緒中執行的方法,同NSTimer一樣,不會阻塞主執行緒。

[self performSelector:@selector(delayMethod) withObject:nil afterDelay:2.0];

取消performSelector

[self
performSelector:@selector(delayMethod) withObject:nil afterDelay:2.0];

注意:上面的取消方法的引數要和執行action的時候傳遞的引數保持一致。這種方法用來取消某個特定的延遲方法。

取消performSelector的所有被延遲執行的方法:

[NSObject cancelPreviousPerformRequestsWithTarget:self];

2. NSTimer定時器

NSTimer 是iOS開發工作中經常會使用到,充當著定時器的作用。NSTimer不會阻塞主執行緒,只是把action滯後,到指定時間由主執行緒繼續執行。

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

取消延時,定時器物件呼叫方法:

[timer invalidate];

3. NSThread執行緒的sleep

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

[NSThread sleepForTimeInterval:2.0]
;

4. GCD

GCD的dispatch_after方法常被用來做延遲執行,與上面的兩個相比,它可以在除了主執行緒之外的執行緒執行,當然也不會阻塞執行緒。

    __weak ViewController *weakSelf = self;

    /*延遲執行時間2秒*/
    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];
    });

相關推薦

iOS執行方法

1. 最直接的方法performSelector:withObject:afterDelay: 這種方法的缺點:每次要為延時寫一個方法 2. @implementation NSObject (PerformBlockAfterDelay) - (void)p

IOS開發之執行方法

1.最直接的方法performSelector:withObject:afterDelay: 這種方法的缺點:每次要為延時寫一個方法 2.使用類別,用BOLCK執行 [程式碼]c#/cpp/oc程式碼: 01 @implementation NSObje

iOS-執行常見方法

本節主要介紹幾種我們通常用到的實現延時的方法。 延時方法我們統一呼叫- (void)delayMethod - (void)delayMethod { NSLog(@"delayMethodEnd = %@",[NSThread currentT

Android執行的四方法

一、開啟新執行緒 new Thread(new Runnable(){          publicvoid run(){              Thread.sleep(XXXX);              handler.sendMessage(); 

android執行方式

  在專案中有很多的方法可能我們不需要立即執行,那麼就需要延時。   首先第一種就是執行緒: sleep會阻塞執行緒   new Thread (new Runnable(){      public void run(){         Thread.sleep(time

C++ 程式處理的方法

(—)使用_sleep()函式  例如:_sleep(200);//延時200毫秒 (二)使用delay(int time)函式 (需要自己實現,編譯器裡面沒有) /// @brief 程式延時

筆記118--Android執行的四方法

轉自:http://jingyan.baidu.com/article/636f38bb091ebbd6b8461029.html 一、開啟新執行緒 new Thread(new Runnable(){ public void run(){

Linux 技巧:讓進程在後臺可靠執行方法

stl 選項 con 中斷 program ng- dem 不同 正在 我們常常會碰到這種問題。用 telnet/ssh 登錄了遠程的 Linux server,執行了一些耗時較長的任務, 結果卻因為網絡的不穩定導致任務中途失敗。怎樣讓命令提交後不受本地關閉終端

iOS-網絡檢測的方法

else required 判斷網絡狀態 sha geb all ane mes nsinteger 1.AFN框架中的:AFNetworkReachabilityManager //AFN判斷網絡 -(void)getInternetStatue{ // 1.獲得網絡監控

iOS 畫圓圖片的方法

方法一: self.cycleImv= [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 50, 50)]; [self.view addSubview:self.cycleImv]; // 為圖片切圓 self.

重新命名程式日誌--批處理啟動的方法

@echo off taskkill /f /im "3CSyslog.EXE" choice /t 1 /d y /n >nul cd E:\PIX_LOG del syslog.log333 choice /t 1 /d y /n >nul ren syslog.log222

重命名程序日誌--批處理啟動的方法

判斷 echo 排列 sta 提示信息 文件中 創建 rec 警告 @echo off taskkill /f /im "3CSyslog.EXE" choice /t 1 /d y /n >nul cd E:\PIX_LOG del syslo

iOS-UIViewController建立的方法和UIWindow的介紹

在程式的啟動過程中提到如果沒有storyboard時:      * 程式啟動時候, 就會呼叫代理的application:  didFinishLaunchingWithOptions:方

Android常用操作的兩方法

今天專案中增加一個延遲2S操作的功能,所以想起了曾經用過的兩種方法--簡單的定時器 第一種,用Timer TimerTask task = new TimerTask() { @Override public void run() { // 你要做的操

linux shell 多個命令一起執行方法

在命令列可以一次執行多個命令,有以下幾種: 1.每個命令之間用;隔開 說明:各命令的執行結果,不會影響其它命令的執行。換句話說,各個命令都會執行, 但不保證每個命令都執行成功。 cd /home/PyTest/src; python suning.py

讓Python指令碼暫停執行方法(轉載)

轉自:讓Python指令碼暫停執行的幾種方法 1.time.sleep(secs) 參考文件原文: Suspend execution for the given number of seconds. The argument may be a

小學ios:navigation push的方法

今天,講講navigation 裡面push到下個頁面的幾種方法吧,現在我知道的是三種,至於其他的麼,等以後用到了,在補充進來吧。 首先第一個就是,在storyboard裡面,直接右鍵拉過去,然後選擇push方法,這個是最簡單的方法了,不需要任何程式碼,就能實現從一個vie

讓程序在後臺可靠執行方法

簡介: 想讓程序在斷開連線後依然保持執行?如果該程序已經開始運行了該如何補救? 如果有大量這類需求如何簡化操作? 我們經常會碰到這樣的問題,用 telnet/ssh 登入了遠端的 Linux 伺服器,運行了一些耗時較長的任務, 結果卻由於網路的不穩定導致任務中途失

asp.net 執行js 方法

方法二: <asp:Literal ID="ltScript" runat="server"></asp:Literal> 然後使用Literal類,在後臺程式碼使用時 private void Button1_Click(object sender

IOS關閉虛擬鍵盤的方法

第一種方法 使用它的委託UITextFieldDelegate中的方法textFieldShouldReturn:來關閉虛擬鍵盤。 在UITextField檢視物件如birdNameInput所在的類中實現這個方法。 - (BOOL)textFie