> Is this an over-release? > > timer = [ [NSTimer scheduledTimerWithTimeInterval: ...] retain]; > ... > [timer invalidate]; > [timer release];
No, you're not over-releasing the timer. > I've seen this pattern so many times I figured it was correct, > although it doesn't seem to comply with the memory management rules > (i. e. the timer is first implicitly released when invalidated, then > explicitly released again). It's a valid technique; when you call -invalidate, the run loop releases the timer (to balance the implicit -retain that it made when the timer was scheduled), but you still need to balance the explicit -retain that you made when the timer was allocated. > Can someone please help clarify? This is my full code: > > - (void)invalidateTimer > { > if ( [theTimer isValid] ) { > [theTimer invalidate]; > [theTimer release]; // crashes here > theTimer = nil; > } > } > > - (void)startTimer > { > [self invalidateTimer]; > theTimer = [[NSTimer scheduledTimerWithTimeInterval:300 target:self > selector:@selector(timerFireMethod:) userInfo:nil repeats:NO] retain]; > } Looks fine to me. Perhaps this is a multi-threading synchronization issue? (Is more than one thread calling these methods?) _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com