延后執(zhí)行
有一個需求,讓一個方法先執(zhí)行完之后,在執(zhí)行另外一個方法,為了能到到這個需求,我們找到了以下兩個方法...
[self performSelector:@selector(doSometing) withObject:self afterDelay:1.0f];
或者下面代碼
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self doSometing];
});
那么就有人說了,兩個方法都可以執(zhí)行,隨便選一個執(zhí)行就可以了,當(dāng)初我也是這么想的.... 呵呵呵,看一下最近翻閱的一本書
1.performSelector系類方法在內(nèi)存管理方面容易疏失,他無法確定將要執(zhí)行的選擇子具體是什么,因而ARC編譯器頁無法插入適當(dāng)?shù)膬?nèi)存管理方法
2.performSelector系類方法所能處理的選擇子太過局限,選擇子的返回值類型及發(fā)送給方法的參數(shù)個數(shù)都收到限制.
3,如果想把任務(wù)放到另外一個線程上執(zhí)行,那么最好不要用performSelector系類方法,二十應(yīng)該把任務(wù)封裝到塊里,然后調(diào)用GCD相關(guān)方法來實現(xiàn).
然而我還是不依為然...就有了下面的問題!!
開發(fā)一個有升級經(jīng)驗的動畫,需要在動畫完畢以后的經(jīng)驗進度之后,在動畫之后的經(jīng)驗增加,類似于這樣的一個效果...
2016-09-14 18_30_41.gif
其實,我在模擬器上運行的時候,performSelector也是正常工作的,然而,換了真機之后,并沒有按照我想要的執(zhí)行(也就是上面??的效果),多方排查,然而并沒有找到什么原因,想到書中的話語,我換了performSelector用了GCD,問題解決了,順帶著iOS7的動畫亂竄的問題也解決了,具體什么原因,我是真的不清楚了...只是知道以后延遲操作最好用GCD....
順便安利一下我們洋蔥數(shù)學(xué)......