Я достиг этого, сохранив дату запуска NSTimer в переменной, а затем установив дату запуска в INFINITY.
Когда я делаю паузу:
pauseStart = [[NSDate dateWithTimeIntervalSinceNow:0] retain];
previousFiringDate = [timer firingDate];
[timer setFiringDate:INFINITY]
Когда я делаю паузу, я добавляю количество времени, в течение которого таймер был приостановлен, к предыдущей дате стрельбы:
float pauseTime = -1*[pauseStart timeIntervalSinceNow];
[timer setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]];
Это сделало это намного проще, чем беспокоиться о недействительности и повторной инициализации таймера. У меня было много таймеров, поэтому я просто поместил их в массив и сделал это со всеми из них. Я поместил NSTimer в подкласс, чтобы сохранить предыдущую дату FiringDate, связанную с этим таймером.
Это также было лучше, чем использование BOOL, независимо от того, была ли она приостановлена или нет, поэтому действия не будут выполняться, если BOOL был установлен. Это связано с тем, что если что-то должно было произойти до того, как вы сделали паузу, этого не произойдет после того, как вы отмените это действие, потому что оно будет пропущено.