Исходное изображение приложения (при условии, что у вас нет фоновой задачи) не «приостанавливает» таймер. Он по-прежнему учитывает теорию, поэтому, если приложение будет открыто, оно будет срабатывать, если пройдет достаточно времени. Это касается и NSTimer. (Дайте мне знать, если вы хотите получить более подробную информацию о том, почему, и я отредактирую ответ).
Рассмотрим, используя следующий код:
@implementation MyCustomClass {
int elapsedTime;
NSTimer *timer;
}
- (id) init {
if ((self = [super init])) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationEnteredBackground)
name:UIApplicationDidEnterBackgroundNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationEnteredForeground)
name:UIApplicationDidBecomeActiveNotification
object:nil];
}
return self;
}
- (void) applicationEnteredForeground {
timer = [NSTimer timerWithTimeInterval:1
target:self
selector:@selector(timerTicked)
userInfo:nil
repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}
- (void) applicationEnteredBackground {
[timer invalidate];
}
- (void) timerTicked {
elapsedTime += 1;
// If enough time passed, do something
}
Пробовали ли вы его? Что случилось? – rmaddy
@rmaddy, я прошу StackOverflow, потому что я не знаю ответа. – Brett
Мое мнение состояло в том, что вместо публикации вопроса просто попробуйте и посмотрите, что произойдет. Ответьте на собственный вопрос, создав тривиальное тестовое приложение. Вы узнаете намного больше и обычно намного быстрее, чем ждать ответа. Если вы все еще не поняли, попробовав свой тест, задайте здесь вопрос и включите то, что вы пробовали, и каковы были результаты. Не бойтесь экспериментировать. Это весело. – rmaddy