Вы должны на самом деле инициализировать TimerCountSeconds
и DecreaseTimer
членов в инициализации. Предполагая, что вы управляете потоком:
...
myObject = [[MyObject alloc] initialize];
...
[myObject touchesBegan:...]
...
[myObject touchesEnded:...]
...
Тогда когда вы звоните initialize
TimerCountSeconds
не был инициализирован, так что вы логически делаете
[<random pointer> isValid]
Который потерпит крах. Точно так же DecreaseTimer недействителен при первом вызове touchesBegan.
В вашем методе инициализации вам нужно будет на самом деле инициализировать все, прежде чем пытаться что-либо использовать.
Похоже, у вас также есть утечка таймеров (touchesBegin
делает таймер недействительным, но не освобождает его)