MoKaM
MoKaM

Reputation: 423

moving a function to a background thread in objective c

I have a function that returns a string that takes 15 seconds to compute on an iPhone.

I want to be able to run the function on the background thread so that the main thread can be used for the user interface.

I've heard GCD is a new technology that is good for this, can someone provide some example code in regards to how this would work?

That is to run a generic function on the background thread and return the result to a UI text field.

EDIT:

Thanks Alladinian it works a treat.

However, when I use GCD my function takes 1 second longer to execute on the iphone simulator (I'd guess this'd be about 5 seconds on an iphone (ill have to test it later today to be sure))

Is there any reason why this is? Perhaps the background thread is slower or something?

Upvotes: 36

Views: 43103

Answers (2)

Alladinian
Alladinian

Reputation: 35626

Well that's pretty easy actually with GCD. A typical workflow would be something like this:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(queue, ^{
    // Perform async operation
    // Call your method/function here
    // Example:
    NSString *result = [anObject calculateSomething];
    dispatch_async(dispatch_get_main_queue(), ^{
        // Update UI
        // Example:
        self.myLabel.text = result;
    });
});

For more on GCD you can take a look into Apple's documentation here

Upvotes: 103

Trausti Thor
Trausti Thor

Reputation: 3774

Also to add, sometimes you don't need to use GCD, this one is very simple to use :

[self performSelectorInBackground:@selector(someMethod:) withObject:nil];

Upvotes: 9

Related Questions