私たちは同様の状況に直面しています。Web からデータを取得したいとします。そのため、バックグラウンドからデータを取得します。その後、新しいデータに基づいていくつかのビューを更新します。
私はこれを行う必要があります:
__block NSDictionary * dic = nil;
__block NSObject* lock = [[NSObject alloc]init];
[Tools doBackground:^{
@synchronized (lock) {
dic=(NSDictionary *)[GrabClass JsonParser:alamat];
}
}];
@synchronized (lock)
{
}
NSString *countView= [[dic objectForKey:[BNUtilitiesQuick currentBusiness].ID] objectForKey:@"CountViews"];
... かくかくしかじか
または私はするべきですか
[Tools doBackground:^{
dic=(NSDictionary *)[GrabClass JsonParser:alamat];
//}
[Tools doForeGround:^{
NSString *countView= [[dic objectForKey:businessReviewed.ID] objectForKey:@"CountViews"];
CLog(@"countView:%@", countView);
NSString *countReview=[[dic objectForKey:businessReviewed.ID] objectForKey:@"Review"];
もちろん:
NSString *countReview=[[dic objectForKey:businessReviewed.ID] objectForKey:@"Review"];
dic=(NSDictionary *)[GrabClass JsonParser:alamat];
言うまでもなく、終了
後に呼び出す必要があります。
また、これは doForeGround と doBackGround の定義です
+(void)doForeGround:(void (^)())block
{
dispatch_async(dispatch_get_main_queue(), ^{
block();
});
}
+(void)doBackground:(void (^)())block
{
//DISPATCH_QUEUE_PRIORITY_HIGH
//dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0), ^{
dispatch_async(dispatch_get_global_queue(-2,0), ^{
block();
});
}