我在我的遊戲中實現了倒計時方法,該方法將使用15秒倒計時。我一直在尋找實現這個目標的不同方式,並相信NSTimer是一條可行的路。NSTimer是否受處理器速度,不同代iPhone等因素影響
然而,有人告訴我,它可能會受到處理器速度等的影響,我的問題是如果這是真的,如果是這樣,我該如何反擊呢?
我已經看到了這一點:NSTimer但不完全瞭解這方面的影響。
是否有其他方式保證15秒的停機時間和所有設備?
我在我的遊戲中實現了倒計時方法,該方法將使用15秒倒計時。我一直在尋找實現這個目標的不同方式,並相信NSTimer是一條可行的路。NSTimer是否受處理器速度,不同代iPhone等因素影響
然而,有人告訴我,它可能會受到處理器速度等的影響,我的問題是如果這是真的,如果是這樣,我該如何反擊呢?
我已經看到了這一點:NSTimer但不完全瞭解這方面的影響。
是否有其他方式保證15秒的停機時間和所有設備?
我不明白你的最後一句話......
不過,我相信你的朋友是正確的,它是相對於什麼實際秒數倒計時,但我向你保證,所不同的是如此之小,稍微偏離這並不明顯,尤其是對於一款遊戲。
之所以有所不同,是因爲您設置了NSTimer在一秒鐘內執行,當它執行時更新屏幕上的倒計時,然後重複。我的猜測是,NSTimer只有在完成執行方法後纔會開始重複,因此每個NSTimer的秒數都是納秒級數,比實際的秒級要長。
蘋果可能會比我早一步,並調用重複之前執行的,但是,我不知道。無論哪種方式,正如我所說的,除非您每秒都在更新屏幕之外進行其他操作,否則您的用戶根本就不應該注意到有什麼不同。
NSTimer應該適用於大多數目的。這並不是確切的 - 這段時間會比您設定的時間稍長一些,但是在良好的條件下只有很小的一部分 - 認爲是毫秒。但是,NSTimer通過runloop觸發,所以它的準確性取決於runloop不忙。您可以通過在自己的線程中使用專用的runloop來儘量減少問題,但如果系統繁忙,您仍然會看到定時器的時間段會略微擴大。
因此,雖然CPU速度與其他因素之間沒有先天的關係,但由於不經常繁忙,更快的硬件將能夠保持更好的狀態。
還要注意的是重複的NSTimer不會相移 - 這將是作爲準確的設置爲1秒作爲15S的間隔。唯一需要注意的是,如果在下一次火災發生時你的處理程序仍在運行,那麼根本不會發生火災。例如如果你花費1.1秒,發射間距將跳到2秒。
的替代方法runloops & NSTimers是dispatch_after。儘管它不太可能更準確,但其滑動仍然取決於目標隊列(可能是默認併發隊列中的一個)在發生時不忙。
原理:NSTimer
不會直接受到處理器速度。在第二代設備上運行1分鐘的計時器也應該代表更新設備上的1分鐘。
現在,這是理論:),但實際上,處理器速度不僅影響您的定時器,而且影響您的應用程序的總體速度(例如,視圖更改速度有多快,按下按鈕等)。唯一的(或最好的測試)是反覆測試你的應用程序的設備類型,你將目標。測試早,經常測試:)
你不能(根據我的經驗)保證在任何設備上的確切時間T
。但是,您可以獲得平均接近預計時間的時間T
。
你看過CADisplayLink類是更有效的計時器:http://developer.apple.com/library/ios/#documentation/QuartzCore/Reference/CADisplayLink_ClassRef/Reference/Reference.html。 – Sandeep
CADisplayLink不適用於測量掛鐘時間,因爲它基於顯示器的刷新率。這可能是「大約60Hz」,但它並不精確,實際上大多數LCD都沒有任何圓形數字 - 例如, 59.97Hz。 –