2010-10-27 38 views
2

我的問題很簡單(我認爲)。我有一個類實現了一個簡單的天文臺(使用一些整數和NSTimer)。我想關閉我的應用程序(所以進入背景模式),但我希望我的計時器仍然繼續計數。我該如何管理?applicationDidEnterBackground整數迭代

非常感謝!

回答

1

保存啓動計時器時出現的時間。類似於self.timerStartDate = [NSDate date];。每秒調用一次NSTimer並增加一個整數會給你非常不準確的結果。
NSTimer Class Reference

計時器不是實時的機構;只有在添加了定時器的運行循環模式之一運行並且能夠檢查定時器的觸發時間是否已過時,它纔會觸發。由於典型的運行循環管理各種輸入源,所以定時器的時間間隔的有效分辨率被限制在50-100毫秒的量級上。如果在長時間標註期間發生定時器的觸發時間,或者運行循環處於未監視定時器的模式下,定時器將在下次運行循環檢查定時器時才觸發。因此,計時器觸發的實際時間可能是計劃的點火時間之後的相當長的一段時間。

如果您使用與保存開始時間的計時器甚至辦法「運行」如果程序沒有運行


編輯: 肯定。使用計時器來計算時間是錯誤的。
我剛寫了一個小測試用例。具有12行簡單表格視圖的應用程序。兩個定時器,一個毫秒發射一個,另一個每10秒發射一次。
在第一個定時器中,我給Integer加1,在第二個定時器中打印第一個定時器的結果和從上次打印以來的時間,用mach_absolute_time()測量。
看看這些差異,第一次測量結果相當不錯,但是如果我開始在簡單的UITableView中滾動,該UITableView在我的強大的Mac上運行在模擬器中,那麼您將得到很大的改變。

2010-10-27 11:16:49.266 MutliTableTest[24726:207] Calculated: 9.988000000000 
2010-10-27 11:16:49.267 MutliTableTest[24726:207] Measured : 10.000055888000 
2010-10-27 11:16:59.266 MutliTableTest[24726:207] Calculated: 9.986000000000 
2010-10-27 11:16:59.267 MutliTableTest[24726:207] Measured : 9.999898500000 
2010-10-27 11:17:09.608 MutliTableTest[24726:207] Calculated: 8.091000000000 
2010-10-27 11:17:09.609 MutliTableTest[24726:207] Measured : 10.341779530000 
2010-10-27 11:17:19.266 MutliTableTest[24726:207] Calculated: 1.966000000000 
2010-10-27 11:17:19.267 MutliTableTest[24726:207] Measured : 9.658319274000 
2010-10-27 11:17:29.266 MutliTableTest[24726:207] Calculated: 9.991000000000 
2010-10-27 11:17:29.267 MutliTableTest[24726:207] Measured : 9.999891531000 

所以不使用的NSTimer,使用NSDate的,並得到我想知道當前的時間和喜歡的東西NSTimeInterval ti = [[NSDate date] timeIntervalSinceDate:self.startDate];

的開始時間,但之間的區別,爲什麼你需要一個differenct的timeStamp每毫秒

+0

所以對你來說,使用整數增量(毫秒,秒,分鐘等)不是一個好主意。因此,最好使用開始日期,然後每毫秒(使用NSTimer)獲取當前日期並進行減法。是對的嗎 ? – Pierre 2010-10-27 09:04:43

+0

這是一個天文鐘,所以我想要與我的數字手錶相同的系統。我做了NSTimeInterval ti = [[NSDate date] timeIntervalSinceDate:self.startDate]但是我怎樣才能每毫秒刷新它沒有定時器? – Pierre 2010-10-27 10:14:21

+0

每一毫秒是一秒1000次,即每秒1000幀。我懷疑這是可能的,但你可以使用一個計時器,這是定時器的用途。只要不用定時器做任何實時的事情。而30秒重畫一次應該綽綽有餘。 – 2010-10-27 10:40:59