performSelector afterDelay在子線程上調(diào)用不運行

平時我們想延遲一段代碼的運行,最簡單的方法就是使用 performSelector afterDelay,但是你有沒有發(fā)現(xiàn)在子線程中調(diào)用這個方法,有時候延時執(zhí)行的代碼并沒有走,這是為什么呢?

我們先看一下下面的例子:

我們在.m文件里面加入如下方法

?? - (void)viewDidLoad {
??????? [super viewDidLoad];
??????? NSThread * thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadRun) object:nil];
?? ? ?? [thread start];
}

- (void)threadRun
{
??? [self performSelector:@selector(delayTest) withObject:nil afterDelay:0.2];???? //不會調(diào)用
??? [self performSelector:@selector(noDelayTest) withObject:nil];????????????? ? ? ? ?? //會調(diào)用
}

- (void)delayTest
{
??? NSLog(@"this is delayTest");
}

- (void)noDelayTest
{
??? NSLog(@"this is noDelayTest");
}

我們發(fā)現(xiàn),在0.2秒之后,delayTest方法并沒有走,而如果我們沒有使用afterDelay的noDelayTest 方法卻直接調(diào)用了,這是為什么呢棋弥?

其實performSelector 方法相當于告訴當前線程去直接去調(diào)用noDelayTest方法,noDelayTest方法當然會被調(diào)用攘乒,

而performSelector afterDelay 相當于 告訴當前線程 用當前線程的定時器去調(diào)用delayTest方法,但是我們知道,在子線程中,默認是沒有定時器的,所以delayTest方法將沒有被調(diào)用的機會.

解決辦法

使用dispatch_after代替performSelector afterDelay,具體如下

- (void)threadRun
{
??? //會調(diào)用
??? dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 0.2*NSEC_PER_SEC);
??? dispatch_after(time, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
??????? [self delayTest];
??? });
}

結論

?1.performSelector 如果不使用延時,程序會再子線程上直接調(diào)用該方法盼砍,方法會被調(diào)用
?2.如果使用延時,在子線程中方法不會被調(diào)用篮灼,因為該方法等待定時器去調(diào)用德频,而該子線程中沒有定時器鲜漩,所以不會調(diào)用
?3.解決2的方法就是使用dispatch_after里面會有一個定時器源譬,來調(diào)用方法

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市孕似,隨后出現(xiàn)的幾起案子瓶佳,更是在濱河造成了極大的恐慌,老刑警劉巖鳞青,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霸饲,死亡現(xiàn)場離奇詭異,居然都是意外死亡臂拓,警方通過查閱死者的電腦和手機厚脉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胶惰,“玉大人傻工,你說我怎么就攤上這事。” “怎么了中捆?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵鸯匹,是天一觀的道長。 經(jīng)常有香客問我泄伪,道長殴蓬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任蟋滴,我火速辦了婚禮染厅,結果婚禮上,老公的妹妹穿的比我還像新娘津函。我一直安慰自己肖粮,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布尔苦。 她就那樣靜靜地躺著涩馆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪允坚。 梳的紋絲不亂的頭發(fā)上凌净,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音屋讶,去河邊找鬼冰寻。 笑死,一個胖子當著我的面吹牛皿渗,可吹牛的內(nèi)容都是我干的斩芭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼乐疆,長吁一口氣:“原來是場噩夢啊……” “哼划乖!你這毒婦竟也來了?” 一聲冷哼從身側響起挤土,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤琴庵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后仰美,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迷殿,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年咖杂,在試婚紗的時候發(fā)現(xiàn)自己被綠了庆寺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡诉字,死狀恐怖懦尝,靈堂內(nèi)的尸體忽然破棺而出知纷,到底是詐尸還是另有隱情,我是刑警寧澤陵霉,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布琅轧,位于F島的核電站,受9級特大地震影響踊挠,放射性物質發(fā)生泄漏乍桂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一止毕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漠趁,春花似錦扁凛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甥绿,卻和暖如春字币,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背共缕。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工洗出, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人图谷。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓翩活,卻偏偏與公主長得像,于是被迫代替她去往敵國和親便贵。 傳聞我的和親對象是個殘疾皇子菠镇,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • 進程 什么是進程 進程是指在系統(tǒng)中正在運行的一個應用程序 每個進程之間是獨立的,每個進程均運行在其專用且受保護的內(nèi)...
    45b645c5912e閱讀 470評論 0 5
  • 在這篇文章中承璃,我將為你整理一下 iOS 開發(fā)中幾種多線程方案利耍,以及其使用方法和注意事項。當然也會給出幾種多線程的案...
    張戰(zhàn)威ican閱讀 603評論 0 0
  • 準備 Raspberry Pi 3B 開發(fā)板 微雪7'' HDMI樹莓派專用電容觸摸屏 Micro SD Card...
    qinwenbo閱讀 1,440評論 1 1
  • 不懷念你了盔粹,你已經(jīng)不是我認識的人了 就這樣吧隘梨,那個QQ號我也不要了 嗯,后會無期舷嗡。
    戲精w閱讀 153評論 0 0