int total = 0; // these are globals..
BOOL dispatchCalled = NO; //
-(void) callDispatch
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
dispatchCalled = YES;
NSLog(@"Total, after 300ms, is %i", total);
});
}
-(void)play // this is my "main" method..
{
NSLog(@"app starts running");
[self callDispatch];
while(!dispatchCalled)
{
total++;
}
[self callDispatch];
}
コンソール :
2012-08-02 20:36:05.357 MyProject[8245:1a07] app starts running
2012-08-02 20:36:05.693 MyProject[8245:3d03] Total, after 300ms, is 11513522
2012-08-02 20:36:05.993 MyProject[8245:3d03] Total, after 300ms, is 11513523
callDispatchで囲まれたメソッドが初めて実行されたとき、whileループは11513522回実行する時間がありました。その時点で、whileループの条件はに設定されYES
、whileループはそれ以上実行されないはずです。ただし、ディスパッチ方式条件による更新を確認する前に、もう一度実行されます。何故ですか?
callDispatchで囲まれたメソッドがwhileループと同時に/並列 に実行されるためですか?これは、whileループが更新された条件を確認するのにもう1サイクルかかる理由を説明しますか?