使用Web服务时,对视图的数据绑定太慢

时间:2013-08-19 07:27:56

标签: objective-c json web-services

我正在使用Web服务进行iPhone App开发。我使用NSDictionary来使用JSONParsing获取数据。它来自Web服务很快,但是绑定到我的视图/ XIB时速度太慢。我没有得到这个问题的实际问题。因为它在Android上运行速度很快但在iPhone上没有。这是他们的任何其他解决方案或示例解决这个问题。

代码 -

- (void)viewDidLoad
{
    //returning cell with name & logo
    NSLog(@"activity array = %@",activityArray);
    addNameList =  [[NSMutableArray alloc]init];
    addThumbnails = [[NSMutableArray alloc]init];
    addActivityId = [[NSMutableArray alloc]init];

    for (int x=0; x<[activityArray count]; x++)
    {
        NSDictionary* toDist = [activityArray objectAtIndex:x];
        [addNameList addObject:[toDist objectForKey:@"activity"]];
        [addThumbnails addObject:[toDist objectForKey:@"icon"]];
        [addActivityId addObject:[toDist objectForKey:@"id"]];
    }

    activityList = addNameList;
    thumbnails = addThumbnails;
    activityIdList = addActivityId;
 }

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    NSString *str = [NSString stringWithFormat:@"%@",[thumbnails objectAtIndex:indexPath.row]];
    cell.imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:str]]];
    cell.textLabel.text = [activityList objectAtIndex:indexPath.row];

    UIImageView *backImage = [[UIImageView alloc] initWithFrame:CGRectMake(20,20,277,58)];
    backImage.backgroundColor = [UIColor clearColor];
    backImage.opaque = NO;
    backImage.image = [UIImage imageNamed:@"cellBackgroundImage.png"];
    cell.backgroundView = backImage;
    return cell;

}

2 个答案:

答案 0 :(得分:1)

  

我没有得到这个的实际问题。

坦率地说,我们也不是。如果你没有向我们展示代码,那么你的代码为什么会变慢是不可能的。听起来真正的问题是你不确定代码的哪一部分很慢。因此,让我告诉您如何解决这个问题:描述您的代码

Xcode包含一个名为Instruments的强大工具,可让您查看应用在每种方法中花费的时间,使用的内存量,功率等等。解释如何使用它对于此响应有点过于深入,所以请从Instruments User Guide开始。简短版本是您可以使用Product-&gt; Test菜单命令在Instruments下启动您的应用程序,以及这样做可以让您收集和分析许多不同类型的性能数据。如果您发现一个高级方法似乎花费的时间超过应有的时间,您可以深入查看该方法并查看它调用的方法,以及这些方法依次调用的方法。

有了您可以从乐器获得的信息,您将不必怀疑代码为何缓慢 - 您将能够凭经验找到答案。

答案 1 :(得分:0)

如果您还没有想出如何在后台加载图像数据

NSString *str = [NSString stringWithFormat:@"%@",[thumbnails objectAtIndex:indexPath.row]];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];

    dispatch_async(dispatch_get_main_queue(), ^{
        cell.imageView.image = [UIImage imageWithData:data];
    });
});