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