Как я могу использовать NSTimer
? Кто-нибудь может дать мне пошаговые инструкции?
objective-c
cocoa
nstimer
lab12
источник
источник
Ответы:
Во-первых, я хотел бы обратить ваше внимание на документацию по Какао / CF (которая всегда является отличным первым портом захода). Документы Apple имеют раздел в верхней части каждой справочной статьи под названием «Сопутствующие руководства», в котором перечислены руководства по задокументированной теме (если таковые имеются). Например, с
NSTimer
, в документации списки двух гидов - компаньонов:В вашей ситуации статья «Темы программирования таймера», вероятно, будет самой полезной, хотя темы с потоками связаны, но не имеют непосредственного отношения к документируемому классу. Если вы посмотрите на статью «Темы программирования таймера», она разделена на две части:
Для статей, использующих этот формат, часто есть обзор класса и того, для чего он используется, а затем пример кода, как его использовать, в данном случае в разделе «Использование таймеров». Существуют разделы «Создание и планирование таймера», «Остановка таймера» и «Управление памятью». Из этой статьи создание запланированного неповторяющегося таймера можно сделать примерно так:
Это позволит создать таймер , который запускаемый после 2,0 секунд и вызывает
targetMethod:
наself
с одним аргументом, который является указателем наNSTimer
экземпляр.Если затем вы хотите более подробно взглянуть на метод, вы можете обратиться к документации для получения дополнительной информации, но есть и объяснения вокруг кода.
Если вы хотите остановить повторяющийся таймер (или остановить неповторяющийся таймер до его запуска), вам необходимо сохранить указатель на
NSTimer
созданный экземпляр; часто это должна быть переменная экземпляра, чтобы вы могли ссылаться на нее в другом методе. После этого вы можете позвонитьinvalidate
поNSTimer
примеру:Также хорошей практикой является
nil
исключение переменной экземпляра (например, если ваш метод, который делает недействительным таймер, вызывается более одного раза, а переменная экземпляра не была установлена в значениеnil
иNSTimer
экземпляр был освобожден, он вызовет исключение).Обратите также внимание на пункт «Управление памятью» в нижней части статьи:
источник
YES
дляrepeats:
когда вы звонитеscheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
. Если вы сделаете это, убедитесь, что сохранили ссылку наNSTimer
экземпляр (он возвращается методом) и следуйте пункту «Управление памятью», как я подробно описал выше.target
иselector
. Например, если ваша цельself
и селекторtimerMethod:
, метод, вызываемый при срабатывании таймера,timerMethod:
определяется вself
. Затем вы можете поместить любой код в этот метод, и метод будет вызываться всякий раз, когда срабатывает таймер. Обратите внимание, что метод, вызываемый при срабатывании таймера (который вы передаете какselector:
), может принимать только один аргумент (который при вызове является указателем наNSTimer
экземпляр).self
"Есть несколько способов использования таймера:
1) запланированный таймер и использование селектора
В качестве примечания, вместо использования таймера, который не повторяется и вызывает селектор после определенного интервала, вы можете использовать простое утверждение, подобное этому:
это будет иметь тот же эффект, что и пример кода выше; но если вы хотите вызывать селектор каждый раз, вы используете таймер с повторениями: YES;
2) таймер
3) незапланированный таймер и использование вызова
и после этого вы запускаете таймер вручную всякий раз, когда вам нужно:
И как примечание, метод onTick: выглядит следующим образом:
источник
Что-то вроде этого:
источник
источник
MyViewController
никогда не освобождается.источник
В ответах отсутствует конкретное время, таймер дня здесь на следующий час:
Конечно, замените «doRefresh» желаемым методом вашего класса
попытайтесь создать объект календаря один раз и сделайте allUnits статическим для эффективности.
добавление одного к часу компонента работает просто отлично, нет необходимости в полуночном тесте ( ссылка )
источник