Строго говоря, таймер не является уведомлением, но ведет себя похожим образом. Это объект класса NSTimer, выдающий сигнал (срабатывания) по истечении заданного промежутка времени.

Таким сигналом служит сообщение, посылаемое одному из экземпляров в прикладном коде. Следовательно, можно организовать отправку уведомления, когда истечет определенный промежуток времени. Это не идеально точное, но вполне приемлемое согласование по времени.

Управлять таймером не очень сложно, хотя и не совсем обычно. Таймер, отсчитывающий время, считается запланированным. Таймер может срабатывать однократно или периодически. Для того чтобы таймер прекратил свое существование, нужно сделать его недействительным. Таймер, установленный на однократное срабатывание, становится недействительным автоматически после своего срабатывания. Периодический таймер продолжает срабатывать до тех пор, пока не будет сделан недействительным вручную, для чего следует отправить сообщение, объявляющее таймер недействительным. Недействительный таймер следует считать запрещенным. Его нельзя больше восстановить или использовать, и вряд ли можно посылать ему сообщения.

Таймер проще всего создать с помощью метода scheduledTimerWithTimelnterval: t arget: selector: user Inf о: repeats : из класса NSTimer. Этот метод создает и планирует таймер, чтобы тот сразу же начал отсчитывать время. Он должен принимать единственный параметр в виде ссылки на таймер. Параметры target: и selector: определяют соответственно целевой объект и сообщение, которое посылается при срабатывании таймера, а параметр userlnfo: такой же, как и при рассылке уведомлений.

Например, в одном из моих игровых приложений ведется счет. Для того чтобы оштрафовать пользователя, требуется убавить его счет, если по истечении десяти секунд после каждого своего движения пользователь не совершит следующее движение. Следовательно, всякий раз, когда он совершит движение, в моем приложении создается таймер, срабатывающий через десять секунд, а кроме того, делается недействительным любой существующий таймер. Метод, вызываемый таймером, убавляет счет.

В версии iOS 7 в классе NSTimer появилось свойство tolerance, определяющее допуск на срабатывание таймера, т.е. промежуток времени, в течение которого таймер может сработать по истечении заданного времени. Как поясняется в документации на класс NSTimer, допуск на срабатывание таймера, составляющий не менее 10% от задаваемого промежутка времени (timelnterval), позволяет экономнее расходовать заряд батареи мобильного устройства. Применение таймеров имеет ряд последствий для управления памятью. Они обсуждаются в главе 12 наряду с применением блоков в качестве альтернативы таймерам.


 

 

 

Добавить комментарий