iOS 从异步线程Block中 拿到数据,(主线程刷新数据)

http://blog.csdn.net/iostiannan/article/details/50750841
这是上一个帖子,如果没看明白的 可以去这里先了解下

接着上面的来说,原本想当然的方法实现不了了, 那么先上解决后的代码


-(void)getTN{
    
    //GCD 异步操作
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       
        //异步现场 请求网络数据 耗时操作
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        manager.responseSerializer = [AFHTTPResponseSerializer serializer];
        
        __block NSString * t =[[NSString alloc] init];
        [manager GET:kURL_TN_Normal parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"Bloct >> tn ====  %@" , operation.responseString);
            t = operation.responseString;
            
            //返回主线程 拿到数据
            dispatch_async(dispatch_get_main_queue(), ^{
                t = operation.responseString;
                
                NSLog(@"t ===== %@",t);

                if ([_delegate respondsToSelector:@selector(getTNWithString:)]) {
                    [_delegate getTNWithString:t];

                }
            });

        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        }];
      
    });
}


首先 ,你要把AFNetworking的处理方法
放到全局队列里面 ,(应该是这样理解的吧)

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{....});

然后,在这个代码块里,进行网络数据请求,

请求到网络数据之后, 立即在主线程更新数据

之后,使用代理 ,去别的ViewController里面传递要获取的数据,

over,下班

你可能感兴趣的:(#,iOS,多线程)