- Используйте
[tmLevel invalidate]
для отмены расписания таймера.
- Не забудьте установить
tmLevel=nil
сразу после (чтобы избежать использования переменной после того, как таймер был незапланирован и выпущен Runloop)
- Не забудьте аннулировать таймер tmLevel перед потерей ссылки на него, а именно вызывать
[tmLevel invalidate]
также перед назначением нового NSTimer переменной tmLevel (иначе предыдущий таймер продолжит работать в дополнение к новому )
Обратите внимание, что в вашем коде есть бесполезные выделения, которые, кроме того, создают утечку:
tmLeftTime=[[NSTimer alloc] init];
tmLeftTime=[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateLeftTime:) userInfo:nil repeats:YES];
здесь вы выделяете экземпляр NSTimer, сохраняете этот экземпляр в tmLeftTime
... и затем сразу же забываете об этом созданном экземпляре, чтобы заменить его другим, созданным с помощью [NSTimer scheduledTimerWithTimeInterval:...]
!
Поэтому NSTimer, созданный с помощью [[NSTimer alloc] init]
, теряется и создает утечку (поскольку она никогда не будет выпущена).
Ваша первая строка совершенно бесполезна, вроде как вы делали
int x = 5;
x = 12; // of course the value "5" is lost, replaced by the new value