Objective-c iPhone NSTimer уникальный идентификатор - PullRequest
2 голосов
/ 20 ноября 2010

У меня есть вопрос о NSTimer, который я объявил в файле .h и позже установил внутри метода.Но этот метод будет вызываться более чем один, поэтому NSTimer запускается несколько раз под одним и тем же именем.

Теперь мой вопрос: можно ли установить тег / идентификатор или что-то еще, чтобы я мог сделать недействительным NSTimer с помощьюправильный тег / идентификатор?

Спасибо за помощь!

Ответы [ 4 ]

3 голосов
/ 18 июня 2012

Этот вопрос задавался давно, но поскольку у меня сегодня была такая же необходимость, вот мое решение:

// set timer
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                         target:self
                                       selector:@selector(whateverMethod)
                                       userInfo:@"timer1"
                                        repeats:YES];

Чтобы аннулировать этот же таймер, проверьте строку userInfo:

// invalidate timer
if ([[timer userInfo] isEqual:@"timer1"])
    [timer invalidate];
2 голосов
/ 20 ноября 2010

Если вы создаете несколько NSTimers и хотите обрабатывать их независимо, вам нужно хранить их независимо.Если есть фиксированное число, просто создайте достаточно переменных и назовите их соответствующим образом.Или храните их в массиве (который затем определяется по индексу).Или поместите их в словарь, используя некоторые строковые имена.

Ваша фраза выше («работает под тем же именем») меня несколько беспокоит.Таймеры имеют некоторые чувствительные требования к обработке памяти.Отредактируйте свой вопрос с более подробной информацией о том, что вы делаете, если вам нужна более широкая помощь в разработке.

1 голос
/ 20 ноября 2010

Ок, у меня теперь есть следующий код.Но есть ли способ установить уникальный идентификатор / тег, чтобы я мог сделать недействительным таймер на более поздний момент.Это потому, что метод таймера будет вызывать больше, чем один.(это для анимированных изображений / кнопок)

MainViewController.m

- (void)timerMethod {

     NSTimer *daTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(animations:) userInfo:nil repeats:YES];

}
1 голос
/ 20 ноября 2010

Вам просто нужно сохранить ссылку на NSTimer, который вы создали и работаете - и просто используйте эту ссылку.

...