objective-c - 在后台做一些事情,一旦完成,在前台做其他事情吗?

标签 objective-c xcode automatic-ref-counting default

我们面临着类似的情况。假设我们想从网络获取数据。因此,我们从后台获取数据。之后,我们返回并根据新数据更新一些 View 。

我应该这样做吗:

__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();
    });
}

最佳答案

这是一个如何使用 GCD 的简单示例

dispatch_queue_t queue;
queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);

    //Do stuff async in the backbround
    dispatch_async(queue, ^{

        dispatch_sync(queue, ^{
            //Fetch data sync. When its done... update.
        });

        //Update on the main thread
        dispatch_sync(dispatch_get_main_queue(), ^{
            //Do some updates
        });
    });

关于objective-c - 在后台做一些事情,一旦完成,在前台做其他事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10680871/

相关文章:

iphone - 2 View 之间的自定义翻转,如何模仿iOS翻转?

ios - 如何在 swift 中将数组传递给另一个 View Controller ?

ios - malloc 的数据是否在 objective-c 中归零?

iphone - 属性类型 'shapeMatched' 与访问器类型 'setShapeMatched:' 不匹配

iphone - TouchsAnyObject 没有像我想象的那样工作

ios - NSArray 中的一个对象被释放

ios - EXC_BAD_ACCESS 仅在测试期间使用 ARC

iphone - 为什么我的 ViewController 仅在第二次调用后释放,iOS ARC?

objective-c - 如何从其他框架获取图像?

ios - 权利文件与您的配置文件中指定的不匹配。(0xE8008016)