我们面临着类似的情况。假设我们想从网络上获取数据。因此,我们从后台获取数据。之后我们回来并根据新数据更新一些视图。
我应该这样做:
__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();
});
}