У меня возникли проблемы с NSTimer. Следующий код вызывается из метода и создает NSTimer и устанавливает его в переменную экземпляра self.syncDelay. Вызывается выражение if в конце метода, проверяющего, является ли таймер действительным.Сохранение сильной указатель на NSTimer не работает
Однако, когда я вызываю этот метод снова до истечения таймера, оператор if в верхней части метода не вызывается. Который, я предполагаю, поэтому [self.syncDelay invalidate]; не отменяет таймер.
У меня есть свойство, определенное как: @property (неатомный, сильный) NSTimer * syncDelay;
Функциональность, которую я ищу, - это таймер, который недействителен, когда метод вызывается во второй раз до истечения таймера и создания нового таймера. Таким образом, эффективно сброс таймера.
EDIT: Когда метод вызывается для второго, NSTimer равен нулю. Это странно, потому что я держу на нем сильный указатель.
else {
if ([self.syncDelay isValid]) {
NSLog(@"Timer valid at start of method");
}
[self.syncDelay invalidate];
self.syncDelay = nil;
NSInvocation *timerInvocation = [NSInvocation invocationWithMethodSignature:
[self methodSignatureForSelector:@selector(testMethod:)]];
// configure invocation
[timerInvocation setSelector:@selector(testMethod:)];
[timerInvocation setTarget:self];
[timerInvocation setArgument:&className atIndex:2]; // argument indexing is offset by 2 hidden args
self.syncDelay = [NSTimer scheduledTimerWithTimeInterval:10
invocation:timerInvocation
repeats:NO];
if ([self.syncDelay isValid]) {
NSLog(@"Timer valid at end of method");
}
}
Где еще используется таймер? Вы проверили, что метод вызывается, когда вы ожидаете (второй журнал печатается?)? – Wain
Таймер больше не используется. Да, метод называется правильно. – pls
Вы действительно вызываете метод на том же объекте? – Sulthan