0

I wanted to be able to Pause/ Resume my NSTimer and found this below answer:

NSDate *pauseStart, *previousFireDate;

-(void) pauseTimer:(NSTimer *)timer { 

    pauseStart = [[NSDate dateWithTimeIntervalSinceNow:0] retain];

    previousFireDate = [[timer fireDate] retain];

    [timer setFireDate:[NSDate distantFuture]];
}

-(void) resumeTimer:(NSTimer *)timer {

    float pauseTime = -1*[pauseStart timeIntervalSinceNow];

    [timer setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]];

    [pauseStart release];

    [previousFireDate release];
}

which works fine. However when testing my App for Leaks, it tells me that I get a leak in here:

[timer setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]];

Can anyone help me? You can see from the code i used that pauseStart and previousFireDate are retained in the pauseTime method and released in the resumeTimer method.

Many thanks

Sam

Community
  • 1
  • 1
Sam Parrish
  • 1,377
  • 1
  • 11
  • 17

1 Answers1

0

You should never call init (or any of the other methods in the same family) on an object twice. (Here's why). Change that line to this:

[timer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]];

and you'll be fine.

Community
  • 1
  • 1
yuji
  • 16,695
  • 4
  • 63
  • 64