Thanks Mike seem You are right, and I write like this

[self performSelector:@selector(doTheThing) withObject:nil afterDelay:0.5];
it can work correctly.

And thanks for your suggestion

2013/2/3 Mike Abdullah <cocoa...@mikeabdullah.net>

>
> 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.
>
>


-- 
Fykec Yin
_______________________________________________

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