On 3 Feb 2013, at 07:41, 尹佳冀 <yinjiaji...@gmail.com> wrote:

> Hi All
> 
> Does anyone can know what the difference between [NSOperationQueue
> currentQueue] and
> performSelectorOnMainThread, If I do some work use operation
> on [NSOperationQueue mainQueue], the UI will not hang up, but if i
> use performSelectorOnMainThread the UI will hang up
> 
> - (void) doTheThing
> 
> {
> 
> //Do do some work about 9~20 s
> 
> }
> 
> 
>       [self showIndicatorWithString:NSLocalizedString(@"Doing...", nil)];
> // is a MBProgreessHUD, add a view then use a animation to show
> 
>        //Case 4 not hang up, HUD show and can refresh, but the screen
> cannot response user's touch
> 
>        NSInvocationOperation *operation = [[NSInvocationOperation alloc]
> initWithTarget:self
> 
> 
>    selector:@selector(doTheThing)
> 
> 
>      object:nil];
> 
>        [[NSOperationQueue mainQueue] addOperation:operation];
This causes -doTheThing to run on the main thread, a little later than now

> 
>        //Case 2 hang up, HUD not show
> 
>        //[self doTheThing];
This executes -doTheThing immediately, on whatever thread is the current one

>        //Case 3 hang up, HUD not show
> 
>        //[self performSelectorOnMainThread:@selector(doTheThing)
> withObject:nil waitUntilDone:YES];
This executes -doTheThing immediately, on the main thread

> 
>        //Case 4 not hang up, HUD show and can refresh, but the screen
> cannot response user's touch
> 
>         NSInvocationOperation *operation = [[NSInvocationOperation alloc]
> initWithTarget:self
> 
> 
>    selector:@selector(doTheThing)
> 
> 
>      object:nil];
> 
>        [[NSOperationQueue currentQueue] addOperation:operation];
All depends on what's the current queue at the moment. If this code is running 
on the main thread, it'll be the main queue. If this code is running as part of 
an operation on a queue, it'll be that queue. Otherwise, it's fairly undefined, 
and might well return nil, meaning your code never runs.

It seems you need to take the time to learn a little about how multithreading 
works and should be used with Cocoa.


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to