延時執行操作(摘)

本文列舉了四種延時執行某函數的方法及其一些區別。假如延時1秒時間執行下面的方法。

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

1.performSelector方法

[self performSelector:@selector(delayMethod) withObject:nil 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方式

double delayInSeconds = 1.0;

__block ViewController* bself = self;

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

[bself delayMethod]; });

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 27、ViewController的didReceiveMemoryWarning是在什么時候調用的?默認的操作是...
    煙雨平生花飛舞閱讀 617評論 0 1
  • 概述 這篇文章中,我不會說多線程是什么、線程和進程的區別、多線程有什么用,當然我也不會說什么是串行、什么是并行等問...
    hashakey閱讀 310評論 0 0
  • .一.進程 進程:是指在系統中正在運行的一個應用程序,每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空...
    IIronMan閱讀 4,521評論 1 33
  • 好女人可以只管優雅迷人,好女朋友可以只管溫柔體貼,可是好老婆“管”的可多了,要“管”公婆、“管”老公、“管”孩子,...
    一顆沙子閱讀 210評論 0 0
  • 這是發生在洪宅東廂房的事,真實的事。 1942年她年方20左右,江南女子溫婉雅致,她是財主的女兒,所以讀過書,認得...
    葉粟閱讀 1,448評論 8 5