NSURLConnection需要很长时间

时间:2013-11-30 02:49:05

标签: ios nsurlconnection

此代码加载表格视图:

- (void)viewDidLoad
{
    [super viewDidLoad];
    //test data

    NSURL *url =[[NSURL alloc] initWithString:urlString];
    //    NSLog(@"String to request: %@",url);
    [  NSURLConnection
     sendAsynchronousRequest:[[NSURLRequest alloc]initWithURL:url]
     queue:[[NSOperationQueue alloc]init]
     completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
         if([data length] >0 && connectionError ==nil){
             NSArray *arrTitle=[[NSArray alloc]init];
             NSString *str=[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
             arrTitle=    [Helper doSplitChar:[Helper splitChar20] :str];
             self.tableView.delegate = self;
             self.tableView.dataSource = self;
             [self fecthDataToItem:arrTitle];
             [self.tableView  reloadData];
             NSLog(@"Load data success");

         }else if (connectionError!=nil){
             NSLog(@"Error: %@",connectionError);
         }
     }];
    //    arrTitle = [NSArray arrayWithObjects:@"ee",@"bb",@"dd", nil];

}

加载需要10到15秒。我怎样才能让它更快? 。 感谢Rob和rmaddy,问题解决了。

1 个答案:

答案 0 :(得分:5)

正如rmaddy指出的那样,你必须在主队列上进行UI更新。否则,将会解决您遇到的一些问题。

queue的{​​{1}}参数表示您希望完成块运行的队列。因此,您只需指定sendAsynchronousRequest

即可
[NSOperationQueue mainQueue]

或者,如果您在该块中执行某些操作较慢或计算成本较高/较慢的情况,请继续使用您自己的后台队列,然后将UI更新分发回主队列,例如:

NSURLRequest *request = [NSURLRequest requestWithURL:url];

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    if([data length] > 0 && connectionError == nil) {
        NSString *str      = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSArray  *arrTitle = [Helper doSplitChar:[Helper splitChar20] :str];
        self.tableView.delegate   = self;
        self.tableView.dataSource = self;
        [self fecthDataToItem:arrTitle];
        [self.tableView reloadData];
    } else if (connectionError!=nil) {
        NSLog(@"Error: %@",connectionError);
    }
}];

无论哪种方式,您都应该始终在主队列上进行UI更新(也可能是模型更新,以保持同步)。