> You must use the 2nd way. If you don't you could get a memory exception if the > timer has fired and, therefore, been invalidated. > > On Aug 3, 2012, at 4:19 PM, Trygve Inda wrote:
My code looks like this: -(void)awakeFromNib { [self setUpdateTimer:[NSTimer scheduledTimerWithTimeInterval:kSomeValue target:self selector:@selector(wantsUpdate:) userInfo:nil repeats:NO]]; } -(void)wantsUpdate:(NSTimer *)inTimer { // do stuff // conditionally do [self setUpdateTimer:[NSTimer scheduledTimerWithTimeInterval:kSomeValue target:self selector:@selector(wantsUpdate:) userInfo:nil repeats:NO]]; } -(void)setUpdateTimer:(NSTimer *)inTimer { if (updateTimer) [updateTimer invalidate]; [updateTimer release]; updateTimer = nil; } updateTimer = [inTimer retain]; } setUpdateTimer can be called in three different ways... A: From awakeFromNib where updateTimer is of course nil and the new timer gets retained. All is ok here. B: From wantsUpdate: In this case we are being called from within the method triggered by the timer and thus the code has not yet fallen back into the run loop so updateTimer is true and [updateTimer isValid] is YES, and once we fall back to the run loop the timer will be invalidated. C: From somewhere else in the program. In this case updateTimer is true, but [updateTimer isValid] is NO since the code has already fallen back into the run loop and invalidated the timer. It needs to work in all three case but I think B is the concern since if I change the code to: if ([updateTimer isValid]) [updateTimer invalidate]; Then it will be invalidated in case B (because the code has not fallen back to the run loop to invalidate it on its own). Not sure if I should be invalidating it after it has fired in this case...before the system does How best to handle all three cases elegantly? _______________________________________________ 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com