Сенсорная обработка не отвечает после аннулирования NSTimer - PullRequest
0 голосов
/ 15 мая 2011

Я создаю повторяющийся объект NSTimer, который вызывает метод -Loop() на каждой итерации цикла выполнения: -

NSTimer *loopTimer = [NSTimer scheduledTimerWithTimeInterval:TIMER_INTERVAL target:self selector:@selector(Loop) userInfo:nil repeats:YES];

В Loop () я отменяю таймер, когда это становится необходимым: -

[loopTimer invalidate];

Однако после использования -invalidate () методы обработки касаний -touchesBegan (), -touchesEnded () перестают отвечать на события касания.NSTimer как-то влияет на цикл выполнения?

Ответы [ 4 ]

1 голос
/ 19 мая 2011

Звучит так, как будто вы не правильно сохранили вид или выпустили его слишком часто.NSTimer сохраняет свой целевой объект, и как только вы invalidate таймер, он освобождает свой целевой объект.В вашем случае это, кажется, приводит к тому, что счетчик удержания падает до 0, и поэтому он освобождается.

Вы можете проверить это, добавив NSLog прямо перед вашим [loopTimer invalidate]; и еще один в началепросмотр dealloc.Держу пари, что вы увидите лог-сообщение dealloc сразу после вашего invalidate лога.

1 голос
/ 15 мая 2011

что еще вы используете в методе цикла ...

Я не уверен, какая именно проблема у вас. В любом случае попробуйте это ... Вы можете использовать метод расписания ..

[self schedule:@selector(loop) interval:TIMER_INTERVAL];

Если вы не планируете в одной и той же функции, вы можете использовать

[self unschedule:_cmd];

, в противном случае вы можете использовать [self unschedule:@selector(loop)];

0 голосов
/ 15 мая 2011

Кажется, я решил проблему, поместив -invalidate () внутри метода -dealloc (). Поэтому, когда я хочу завершить цикл, я вызываю [self.view removeFromSuperView], и это в конечном итоге вызывает недействительность.

Помещение -invalidate () в представление lifecyle, кажется, освобождает представление ...

0 голосов
/ 15 мая 2011

Нет, это никак не повлияет на ваш runloop.Фактически, я проверил это сам, после того, как я сделал недействительным таймер, я смог обработать прикосновения к экрану. Так что я думаю, проблема в другом.

...