• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
How to use NSTimer correctly?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How to use NSTimer correctly?


  • Subject: How to use NSTimer correctly?
  • From: Alexander Bokovikov <email@hidden>
  • Date: Sat, 25 Jul 2009 17:16:59 +0600

Hi, All,

In my app I have a timer, created in the awakeFromNib and living until the app terminates. And I have some problem when I close the application. Here are my code snippets:

- (void) awakeFromNib {
.......
	processingTimer = YES;
	timer = [NSTimer scheduledTimerWithTimeInterval:0.5
											 target:self
										   selector:@selector(onTimer:)
										   userInfo:nil
											repeats:YES];
...
}

As I believe, everything is OK here...

- (void) dealloc {
	processingTimer = NO;
	[timer invalidate];
......
}

I'm not sure, if I must invalidate the timer, but think I should do it.

- (void)onTimer:(NSTimer*)timer {
.......
	//
	if (!processingTimer) return;
	//
< some procedure is going here, which updates the data for NSTableView
	//
	if (!processingTimer) return;
	//
	// Update results list in the NSTableView
	[fileView reloadData];
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
here we had an exception within obc_msg_send()
........
}

Here is the onTimer: procedure, where I had an exception after I closed the application. I tried to remove timer invalidation from the dealloc, but nothing helped unless I've inserted a boolean var processingTimer, which should indicate whether our app still lives or it is slosing now. First I've added this var check only at the top of onTimer procedure, yet before the main calculating procedure call. That didn't helped. Then I've added yet another check right before the call of [NSTable reloadData]. And this helped. At least I've tried to run and close my app several times and I didn't see an exception.

Also I tried to change timer interval, believing that my main procedure runs too slowly, so overlapped onTimer calls occur. But it makes no sense.

So, what is the _correct_ way to do all that?

Thanks.

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


  • Follow-Ups:
    • Re: How to use NSTimer correctly?
      • From: Dave Keck <email@hidden>
  • Prev by Date: Re: Challenge: Block Main Thread while Work is done, with Timeout
  • Next by Date: Re: How to use NSTimer correctly?
  • Previous by thread: Re: Unit testing question
  • Next by thread: Re: How to use NSTimer correctly?
  • Index(es):
    • Date
    • Thread