iOS延時(shí)執(zhí)行測(cè)試

#import "Person.h"

@implementation Person

- (void)testLog {
    [self performSelector:@selector(logd) withObject:nil afterDelay:0];//1
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"c");
    });//2
    
    [self performSelector:@selector(logb)];//3
    
    NSLog(@"a");//4
}

- (void)logd {
    NSLog(@"d");
}

- (void)logb {
    NSLog(@"b");
}

@end

上面這段代碼在OS命令行程序和iOS程序中運(yùn)行結(jié)果完全不同
這是在OS命令行程序中結(jié)果
這是在iOS程序中運(yùn)行結(jié)果

在iOS程序中運(yùn)行結(jié)果的原理

  • performSelector:@selector(logb)
    知識(shí)點(diǎn):告訴線程直接調(diào)用方法
  • -(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
    知識(shí)點(diǎn):這個(gè)方法是單線程的,也就是說(shuō)只有當(dāng)前調(diào)用此方法的函數(shù)執(zhí)行完畢后,selector方法才會(huì)被調(diào)用。
  • dispatch_after能讓我們添加進(jìn)隊(duì)列的任務(wù)延時(shí)執(zhí)行,該函數(shù)并不是在指定時(shí)間后執(zhí)行處理,而只是在指定時(shí)間追加處理到dispatch_queue

程序執(zhí)行到//1的時(shí)候,系統(tǒng)會(huì)等待testlog全部執(zhí)行完再延時(shí)0s執(zhí)行l(wèi)ogd方法;
執(zhí)行到//2的時(shí)候,告訴主隊(duì)列0s后添加logc任務(wù)到主隊(duì)列;
執(zhí)行到//3的時(shí)候,主線程直接執(zhí)行l(wèi)ogb方法,打印b;
執(zhí)行到//4的時(shí)候,主線程直接打印a;
打印完a,將需要延時(shí)加入進(jìn)隊(duì)列的方法加進(jìn)主隊(duì)列,而(void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay需要等待當(dāng)前函數(shù)testlog執(zhí)行完才能調(diào)用,所以先加進(jìn)隊(duì)列的是logc,打印c;
打印完c,testlog函數(shù)全部執(zhí)行完畢,執(zhí)行l(wèi)ogd方法,打印d。

如有錯(cuò)誤,敬請(qǐng)指出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用到的組件 1、通過(guò)CocoaPods安裝 2、第三方類(lèi)庫(kù)安裝 3、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 15,191評(píng)論 1 180
  • 你從來(lái)叫不醒一個(gè)裝睡的人,但我可以。 樓上班級(jí)的下來(lái)領(lǐng)快遞啦!你的快遞到了!??! ——快遞小哥 你永遠(yuǎn)無(wú)法喚醒一個(gè)...
    甲高高閱讀 370評(píng)論 0 0
  • 嗯,我還記得去年的海邊。 看著晚風(fēng)吹起我至腰的長(zhǎng)發(fā),綠色的裙子凌凌起舞。 對(duì)面有朦朧亮起的浮...
    施周李李閱讀 191評(píng)論 0 0
  • 我曾嘗試過(guò)制定各種各樣的計(jì)劃——學(xué)習(xí)計(jì)劃、鍛煉健身計(jì)劃以及做成某一件事的計(jì)劃,但終究這些美好的計(jì)劃卻往往在它們?cè)?..
    心向遠(yuǎn)方的孩子閱讀 157評(píng)論 0 0

友情鏈接更多精彩內(nèi)容