的的NSDate方法,因爲一月timeIntervalSinceReferenceDate返回的秒數手動調度1,2001,格林威治標準時間上午12:00。它包括的第二
分數如果你調用,除以60,取最低值,然後乘以60,它應該給你目前的「圓分鐘」的時間間隔。將60加到上面,你得到下一個「round minute」的時間間隔,給THAT加1,在下一個「round minute」之後你得到一秒的時間間隔
代碼可能看起來像這樣的:
NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
NSTimeInterval nextMinute = floor(now/60)*60 + 61 //time interval for next minute, plus 1 second
NSTimeInterval delay = nextMinute - now;
//Delay now contains the number of seconds until the next "round minute", plus 1 second.
dispatch_after(
dispatch_time(DISPATCH_TIME_NOW,
(int64_t)(delay * NSEC_PER_SEC)),
dispatch_get_main_queue(),^
{
//Replace the code below with whatever target/userInfo you need.
[NSTimer scheduledTimerWithTimeInterval: 60
target: self
userInfo: nil;
repeats: YES];
}
);
編輯:其實,一分鐘的「第一第二」是第零秒,所以你應該改變+61在計算nextMinute
爲「+60」上面的代碼,而不是「+61」
你需要每分鐘的第一秒,而不是僅僅一分鐘一次有什麼特別的原因嗎?只是問,因爲你正在運行的當前設備上的時間不太可能是完全正確的。 – Fogmeister 2014-12-01 15:59:11
我認爲問題是,反正是有,我們可以在正是我們所需要基於設備的時間的時間保證的東西執行。也想親自了解這一點。 – Unheilig 2014-12-01 16:00:54
@Fogmeister我想更新自定義標籤的分鐘數,但希望在+ 2秒內正確。但不想每秒都打電話給NSTimer。我知道這是瘋狂的:-) – WebOrCode 2014-12-01 16:07:40