基于UITableView ios中的可见单元格加载内容

时间:2014-11-06 07:49:39

标签: ios objective-c uitableview asynchronous nsmutablearray

在我的应用程序中尝试加载一个NSMutableArray,共有80,000个文本" name"并且它工作得很好但是当我们滚动时整个滚动变得滞后(不是平滑滚动)。

所以我正在寻找任何方法将内容加载到UITableView中的那些可见单元格(异步)。

这是我目前的代码

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;    //count of section
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    // return [[copyGenericDetails valueForKey:@"name"]count];    //count number of row from counting array hear cataGorry is An Array

    return [[bigArray valueForKey:@"Name"]count];
}



- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyIdentifier = @"cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:MyIdentifier];
    }


    cell.textLabel.text=[[bigArray valueForKey:@"Name"] objectAtIndex:indexPath.row];
    return cell;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    return 40;

}

请帮我滚动此列表。

3 个答案:

答案 0 :(得分:2)

假设bigArray是说的,即NSArray,那么这一行:

cell.textLabel.text=[[bigArray valueForKey:@"Name"] objectAtIndex:indexPath.row];

可能会减慢你的速度。 [bigArray valueForKey:@"Name"]导致扫描所有80,000个条目,并获取并存储valueForKey。只有这样才能选择正确的行。我会把它们换成圆形:

cell.textLabel.text=[[bigArray objectAtIndex:indexPath.row] valueForKey:@"Name"];

这样它只是查找80,0000个项目,并获取仅一个项目的Name属性。同样地:

return [[bigArray valueForKey:@"Name"]count];

可以替换为:

return [bigArray count];

答案 1 :(得分:0)

如果你的大数组被加载意味着数组已经完全就绪,或者没有运行后台任务,那么滚动应该很快。检查一些额外的东西是不是影响滚动就像加载其他东西或任何后台任务一样?

答案 2 :(得分:0)

由于UITableView仅加载可见单元格,因此不能使tableView减慢速度。但由于NSArray实际上并不是最快的访问结构之一,因此可能会使阵列减慢速度。您是否尝试将数据拆分为几个较小的数组(假设总是将10k值放入一个数组中)并根据indexPath.row实现一些逻辑来访问不同的数组?

哦顺便说一下:你在测试什么设备?