Освобождение объекта не присваивает ноль указателю автоматически.Добавьте clickTimer = nil;
после вашего заявления о выпуске.Это предотвратит доступ другого метода к недопустимому объекту, если он попытается освободить clickTimer .
. Чтобы все ваши методы правильно установили clickTimer в nil , вы можете подумать о создании метода, который делает недействительным таймер, вместо того, чтобы каждый метод делал недействительным таймер:
- (void) invalidateClickTimer
{
// invalidate timer
if (clickTimer == nil)
return;
[clickTimer invalidate];
[clickTimer release];
clickTimer = nil;
// stop clicking
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
[click setIsClicking:NO];
[clickerButton setBackgroundImage:[UIImage imageNamed:@"wood.png"] forState:UIControlStateNormal];
[clickerButton setTitle:@"Start" forState:UIControlStateNormal];
[clickStatus setText:[NSString stringWithFormat:@"%d",[click numberOfBeatsToDisplay]]];
[click setClickCount:0];
return;
}
Затем замените следующие строки в - (IBAction)clickerPressed:(id)sender
if ([click isClicking] == YES) {
[clickTimer invalidate];
[clickTimer release];
clickTimer = nil;
// enable the idle timer when the clicking is turned off
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
[click setIsClicking:NO];
[clickerButton setBackgroundImage:[UIImage imageNamed:@"wood.png"] forState:UIControlStateNormal];
[clickerButton setTitle:@"Start" forState:UIControlStateNormal];
[clickStatus setText:[NSString stringWithFormat:@"%d",[click numberOfBeatsToDisplay]]];
[click setClickCount:0];
}
С этой строкой:
if ([click isClicking] == YES) {
[self invalidateClickTimer];
}
Вызовите новый метод - (void) invalidateClickTimer
из UIViewController родительского представления.Вероятно, в методе - (void)viewWillDisappear:(BOOL)animated