Простой и быстрый ответ, Нет. Вы не можете запустить таймер в течение часа после нажатия кнопки «Домой». Что вы можете сделать, так это ознакомиться с вызовами, которые совершаются, когда пользователь нажимает кнопку «Домой», а затем переключается обратно на ваше приложение.
Это вызовы, которые вы получите сейчас (многозадачность):
// User taps your app icon first launch
application:didFinishLaunchingWithOptions:
applicationDidBecomeActive:
// User pushes home button
applicationWillResignActive:
applicationDidEnterBackground:
// User selects your app again
applicationWillEnterForeground:
applicationDidBecomeActive:
Если вы установите клавишу Application does not run in background
на YES
, ИЛИ, если ваше устройство не поддерживает многозадачность (например, iPod touch 2nd Gen), то точно такие же действия вызовут эти методы.
// User taps your app icon first launch
application:didFinishLaunchingWithOptions:
applicationDidBecomeActive:
// User pushes home button
applicationDidEnterBackground:
applicationWillTerminate:
// User selects your app again
application:didFinishLaunchingWithOptions:
applicationDidBecomeActive:
Обратите внимание, что если ОС решит убить ваше приложение за память, она не разбудит вас только для того, чтобы убить вас, вы никогда не гарантированно получите вызов applicationWillTerminate:
.
Я могу придумать две причины для вашего вопроса:
1) Вы хотите сохранить состояние и хотите сделать это в applicationWillTerminate:
, но это не вызывается. Если это так, я бы предложил сохранить состояние в applicationDidEnterBackground:
, поскольку оно вызывается в обоих случаях, когда пользователь нажимает кнопку возврата домой.
2) Вы хотели перезагрузить данные, если приложение неактивно в течение определенного периода времени. В этом случае сохраните текущее время в течение applicationDidEnterBackground:
и проверьте, сколько времени прошло в applicationDidBecomeActive:
, и при необходимости перезагрузите.