Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iphone ios running in separate thread

What is the best way to run code on a separate thread? Is it:

[NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL]; 

Or:

    NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self                                                                         selector:@selector(doStuff:)                                                                           object:nil; [queue addOperation:operation]; [operation release]; [queue release]; 

I've been doing the second way but the Wesley Cookbook I've been reading uses the first.

like image 361
Mike S Avatar asked Oct 06 '10 02:10

Mike S


People also ask

Is iOS single thread?

Each process (application) in OS X or iOS is made up of one or more threads, each of which represents a single path of execution through the application's code. Every application starts with a single thread, which runs the application's main function.

Why do you have to update the UI on the main thread?

While an animation or screen update is occurring, the system tries to execute a block of work (which is responsible for drawing the screen) every 16ms or so, in order to render smoothly at 60 frames per second. For the system to reach this goal, the UI/View hierarchy must update on the main thread.


1 Answers

In my opinion, the best way is with libdispatch, aka Grand Central Dispatch (GCD). It limits you to iOS 4 and greater, but it's just so simple and easy to use. The code to do some processing on a background thread and then do something with the results in the main run loop is incredibly easy and compact:

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{     // Add code here to do background processing     //     //     dispatch_async( dispatch_get_main_queue(), ^{         // Add code here to update the UI/send notifications based on the         // results of the background processing     }); }); 

If you haven't done so already, check out the videos from WWDC 2010 on libdispatch/GCD/blocks.

like image 151
Jacques Avatar answered Sep 28 '22 02:09

Jacques