Я не имею в виду синхронизацию и прочее. На самом деле это не хорошая практика программирования. Я просто думаю, что нужно что-то сделать.В Objective-c, как я могу гарантировать, что один код вызывается после другого кода?
Например, скажите, что у меня есть нить, которая приостановит ее сам и дождитесь события. Часто событие происходит до того, как этот поток приостанавливается.
Поэтому я хочу, чтобы событие подождало, пока поток не приостановится до его появления.
Как это сделать?
Например, я хочу сделать 5 вещей на mainQueue.
Сделайте что-нибудь. Подождите, пока все будет готово, сделайте следующее.
Я делаю это, то:
-(void) vDoSomeStuffsInSequence:(NSArray *) arblArrayOfBlocksToExecuteOnMainThread
{
if (self.blockThis) {
PO(@"Cancel Push View Controller");
return;
}
@synchronized(self)
{
self.blockThis=true;
}
AssertMainThread
NSMutableArray * arblNotFirstBlocks = [arblArrayOfBlocksToExecuteOnMainThread mutableCopy];
void(^blockToExecute)() = arblNotFirstBlocks[0];//execute first block right away
blockToExecute();
PO(@"execute pop push etc");
[arblNotFirstBlocks removeObjectAtIndex:0];
[[NSOperationQueue new] addOperationWithBlock:^{
PO(@"before first suspend");
[self vSuspendAndHaltThisThreadTillUnsuspended]; //This often happen after (instead of before) the code that execute [self vContinue is called]
PO(@"after first suspend");
for (void(^blockToExecute)() in arblNotFirstBlocks) {
while(false);
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
blockToExecute();//dothisfirst must unsuspend a thread somewhere
}];
[self vSuspendAndHaltThisThreadTillUnsuspended];
}
[[NSOperationQueue mainQueue]addOperationWithBlock:^{
@synchronized(self)
{
self.blockThis=false;
}
[self vContinue];
}];
[self vSuspendAndHaltThisThreadTillUnsuspended];
PO(@"finish vDoSomeStuffsInSequence");
}];
}
Похоже, вы хотите использовать грандиозную центральную отправку. Или, возможно, NSOperationQueues. Посмотрите здесь: http://www.fieryrobot.com/blog/2010/09/01/synchronization-using-grand-central-dispatch/ – slycrel
Я нашел решение, которое работает. Я хочу ответить. –