Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Waiting for a specified duration in Cocoa

Is there a more straightforward way to wait for a specific amount of time in Cocoa than what I have come up with below?

- (void) buttonPressed {     [self makeSomeChanges];      // give the user some visual feedback and wait a bit so he can see it     [self displayThoseChangesToTheUser];     [self performSelector:@selector(buttonPressedPart2:) withObject:nil afterDelay:0.35]; }  - (void) buttonPressedPart2: (id)unused {     [self automaticallyReturnToPreviousView]; } 

Just to be clear, there is no functional problem with this code -- my only beef is a stylistic one. In my case the flow is simple enough that it works, but try to encapsulate it or throw in some conditionals and things could turn ugly. It's been kind of nagging at me that I couldn't find a way to wait and then return to that same point in code like this (fictitious) example:

- (void) buttonPressed {     [self doStuff];     [UIMagicUnicorn waitForDuration:0.35];     [self doStuffAfterWaiting]; } 
like image 975
Purple Ninja Girl Avatar asked Feb 09 '10 20:02

Purple Ninja Girl


2 Answers

There is

usleep(1000000); 

and

[NSThread sleepForTimeInterval:1.0f]; 

both of which will sleep for 1 second.

like image 152
Brad Larson Avatar answered Oct 05 '22 04:10

Brad Larson


Here's the NSTimer way of doing it. It's might be even uglier than the method you're using, but it allows repeating events, so I prefer it.

[NSTimer scheduledTimerWithTimeInterval:0.5f                                   target:self                                selector: @selector(doSomething:)                                 userInfo:nil                                 repeats:NO]; 

You want to avoid something like usleep() which will just hang your app and make it feel unresponsive.

like image 28
Jason Moore Avatar answered Oct 05 '22 04:10

Jason Moore