Возникли проблемы с аннулированием iPhone NSTimer - PullRequest
0 голосов
/ 17 июля 2010

Хорошо, я знаю, что задал похожий вопрос некоторое время назад, но это не так. Теперь у меня есть два таймера, которые срабатывают на событии TouchDown их соответствующих кнопок. В событии TouchUpInside у меня есть соответствующий код, который сообщает каждому таймеру [pressTimer invalidate] и pressTimer = nil. Проблема, которая возникает сейчас, так как я добавил второй таймер, состоит в том, что, когда селектор срабатывает (таким образом, отпуская кнопку и вызывая событие TouchUpInside), приложение вылетает и выплевывает Not recognized [NSCFTimer -invalidate] или что-то в этом роде. Кнопки работают нормально, пока не сработает таймер, и даже тогда не произойдет сбоя, пока я не отпущу палец. Я думаю, что происходит, что событие TouchUpInside пытается аннулировать недействительный / сработавший таймер, потому что он работает нормально, пока таймер все еще работает. Интересно, почему это происходит, потому что этого не было до того, как я добавил второй таймер. Мое временное исправление - установить часть таймера repeating:YES, которая поддерживает мою теорию о том, что он не может сделать недействительным / сработавшим таймер. Есть предложения?

* Бонус: на связанной заметке, сколько сбоев мне нужно получить от людей, прежде чем они появятся в iTunes Connect?

1 Ответ

0 голосов
/ 17 июля 2010

С одной стороны, pressTimer=nil не имеет смысла; При присваивании nil объекты высвобождаются только при использовании сеттера для свойства retain ed, т.е. self.timer = nil;. (это на самом деле: [self setTimer:nil]!)

Но даже тогда, если вы неправильно процитировали себя и использовали установщик, экземпляр NSTimer не нужно освобождать, он должен быть invalidate d. Ваша ошибка типа цитирования не должна возникать.

Что касается вашей теории: вы можете читать invalidate как release в этом контексте - вы не можете делать это слишком часто ...

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

...