- Get link
- Other Apps
- How to wait for an asynchronously dispatched block to finish?
- How to integrate semaphore in iOS?
- How to delay splash screen for longer time, so that developer can prefetch or execute something before start of iOS App.
The answer of all the above questions is SEMAPHORE. A semaphore is a variable or abstract data type used to control access to a common resource by multiple processes in a concurrent system such as a multiprogramming operating system.
Suppose you want to perform some task before root view controller is shown to user.
Goto AppDelegate's method didFinishLaunchingWithOptions, create a method as below:-
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self performTaskToDelaySplash];
}
-(void) performTaskToDelaySplash {
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); //1. Create semaphore
//Perform your task here, i.e Any webservice call or any database operation
dispatch_semaphore_signal(semaphore); //3, write this line when your task completes
while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW)) { //2
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:100]];
}
}
Stackover flow reference post.
Comments
Post a Comment