Обычно рекомендуется избегать опроса и вместо этого запрашивать уведомления от системы, например:
[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(batteryLevelUpdate)
name:UIDeviceBatteryLevelDidChangeNotification
object:nil];
… где batteryLevelUpdate
будет выглядеть следующим образом:
- (void)batteryLevelUpdate:(NSNotification *)notification
{
// do whatever, using: [[UIDevice currentDevice] batteryLevel]
}
Из UIDevice Class Reference :
Уведомления об изменении уровня заряда батареи отправляются не чаще одного раза в минуту.Не пытайтесь рассчитать скорость разряда батареи или оставшееся время работы батареи;Скорость дренажа может часто меняться в зависимости от встроенных приложений, а также от вашего приложения.
Один раз в минуту в 10 раз чаще, чем ваш код проверяет в настоящее время, при этом затрачивая гораздо меньше усилий на процессор. не упоминает, однако, какая гранулярность изменений вызовет уведомления - будет ли отправлено изменение на 0,01%, или требуется изменение> 1%?
Чтобы ответить на ваш другой вопросесли вам нужно установить setBatteryMonitoringEnabled
обратно на NO
: если вы используете уведомления и не опрашиваете batteryStatus вручную, тогда ответ заключается в том, что вы должны оставить его на YES
или рискнуть пропустить уведомления.
Официальный образец кода Apple BatteryStatus использует то же самое представление о состоянии батареи.
Существует также UIDeviceBatteryStateDidChangeNotification
, который будет уведомлять вас, когда устройство разряжается (используется).заряжается или полностью зарядился.