-(void) test{
for(Person *person in persons){
__block CGPoint point;
dispatch_async(dispatch_get_main_queue(), ^{
point = [self.myview personToPoint:person];
});
usePoint(point); // take a long time to run
}
}
personToPoint()
ポイントを取得するにはメインキューで実行する必要があり、メソッドusePoint()
はメインキューで実行する必要がなく、実行に時間がかかります。ただし、usePoint(point)
dispatch_asyncを使用しているため、実行時にポイントに値が割り当てられていません。dispatch_syncメソッドを使用する場合、プログラムはブロックされます。割り当てられたポイントをどのように使用できますか?
更新:次のコードのパターンを実装する方法:
-(void) test{
NSMutableArray *points = [NSMutableArray array];
for(Person *person in persons){
__block CGPoint point;
dispatch_async(dispatch_get_main_queue(), ^{
point = [self.myview personToPoint:person];
[points addObject:point];
});
}
usePoint(points); // take a long time to run
}