繁体   English   中英

主线程中的 NSURLSession

[英]NSURLSession in main thread

我正在尝试从 MySQL 下载数据。 然而,当 NSURLSession 创建一个新线程时,数据还没有完全下载,因此主线程正在处理空值/崩溃。 我使用过 GCD 的 dispatch_async,但是它慢了几毫秒。

在我的测试程序中,我有两个 NSLog,一个直接在调用 NSURLSession 方法之后,另一个在方法本身中。 输出(如下)显示 NSURLSession 延迟了 30 毫秒。 虽然时间本身并不多,但它会对我如何安排我的任务产生巨大影响。 有没有办法暂停主线程,直到数据下载完毕,方法完成?

2014-03-30 18:56:06.224 TestProgram[1396:60b] (null) 
2014-03-30 18:56:06.258 TestProgram[1396:60b] [{"error":200}]
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];
NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
    if(error == nil)
    {
        dispatch_async(dispatch_get_main_queue(), ^{

            NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
            NSLog(@"%@",text);

            NSError *error;

            self.json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];

            for(int i =0 ; i < self.json.count ; i++)
            {
                [dataParse setDictionary:_json[i]];
            }
        });
    } else {
        NSLog(@"Response:%@ %@\n", response, error);
    }
}];

[dataTask resume];

查看 NSURLSessionDataTask 完成例程的文档。 这似乎意味着此时数据尚未完全下载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM