天天看點

iOS中的定時操作比較和原理簡單分析

定時操作對于開發人員來說有着廣泛的應用場景;對于iOS開發,實作定時操作的手法也有多種,這裡我們簡單的進行比較和分析。

1. NSTimer  簡單易上手,最進階的api,調用也比較友善。(精度也最低)

但:NSTimer在不做任何額外設定的情況下隻能在主線程使用,且會受到其他任務的幹擾(主線程runloop執行其他任務,nstimer就不能及時觸發);

可以設定NSRunLoopCommonModes來對其加以改善,這個時候主線程的UI操作已經不會阻塞它的觸發了。

performselector after delay 可以認為是1的變種,精度和NSTimer相同。

2.使用 gcd的api, dispatch_after來進行定時操作。

該api雖然屬于gcd的操作序列,但調用也比較友善,同時不受主線程UI操作的幹擾,精度也尚可;不失為NSTimer的一個進階替代品。

3.要獲得更好的精度,需要使用更底層的api實作,大概可以精确到毫秒級别。

首先你要搞一個更牛逼的實時線程:

然後你需要相對應的定時api:

參考文檔:https://developer.apple.com/library/content/technotes/tn2169/_index.html

繼續閱讀