Что вы на самом деле хотите знать каждый час? Вы пытаетесь точно определить местоположение или просто определить, значительно ли переместился телефон? startMonitoringSignificantLocationChanges
уведомит вас, когда телефон будет перемещаться «значительно» (что обычно означает смену вышек сотовой связи). В городах это может случаться довольно часто. startMonitoringForRegion:desiredAccuracy:
будет уведомлять вас, только когда вы выйдете за пределы указанного радиуса.
startMonitoringSignificantLocationChanges
довольно дешево. Он в основном опирается на сотовую антенну, которая в любом случае включена. Если он срабатывает чаще, чем раз в час, вы всегда можете просто пропустить обработку и вернуться. Но нет никакой гарантии, что вам будут звонить раз в час, особенно в сельской местности.
Если вы являетесь приложением VoIP, то вы можете зарегистрировать периодический интервал проверки, когда вы можете запустить код. Но вы не можете сделать это для приложений определения местоположения.
Профилировали ли вы свой код с помощью инструмента диагностики энергии? Что на самом деле есть время и сила? Вы жуете радио, процессор, диск?
EDIT
Когда приложение умирает, Значительные изменения по-прежнему продолжают выполняться и оставляют небольшую иконку со стрелкой рядом с процентом на верхней панели инструментов iPhone. Мои пользователи жалуются, что значки остаются после убийства приложения
После того, как приложение умирает, если вы были зарегистрированы для значительных изменений, вы ожидаете, что вас снова запустят в ответ на них. Если вы хотите отменить регистрацию в случаях, когда вас уволили, вы можете добавить stopMonitoring...
к вашему applicationWillTerminate:
методу. Это не гарантированно будет вызвано, но это хорошая вещь, и я считаю, что она будет вызвана, если пользователь прервал вас напрямую, а вы не были отстранены (не проверяли это).
Опять же, существенные изменения местоположения должны быть чрезвычайно дешевыми с точки зрения срока службы батареи, если есть покрытие ячейки. Они не должны заставлять GPS оставаться включенным.