表重新加载需要花费太多时间来更新单元格

时间:2017-04-19 10:59:10

标签: ios objective-c

我已经尝试过所有方法,比如在主线程等中运行.... 但他们都没有工作.. 我的表有超过500行,其中包含图像音频和文本.. 每次重新加载表至少需要5到10秒的时间,而ui正在冻结。 请帮帮我...

4 个答案:

答案 0 :(得分:1)

你可以使用NSOperational Queue:

NSOperationQueue *que = [[NSOperationQueue alloc]init];

        [que addOperationWithBlock:^{

                [[NSOperationQueue mainQueue] addOperationWithBlock:^{


       //u can assign all the table view values and content here

       // it will not pause the data u can scroll immediately             
            }];

        }];

解决方案2:

调用你的数据:

dispatch_async(dispatch_get_main_queue(), ^{
//call ur data methods or web services methods in side this block 
    });

在表格视图中分配数据:

 NSOperationQueue *que = [[NSOperationQueue alloc]init];

            [que addOperationWithBlock:^{

                    [[NSOperationQueue mainQueue] addOperationWithBlock:^{


           //u can assign all the table view values and content here

           // it will not pause the data u can scroll immediately             
                }];

            }];

答案 1 :(得分:0)

你需要使用GCD:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
                   // do backgroud work
                   ^{
        dispatch_async(dispatch_get_main_queue(), ^{
            // do UI work like
            // label.text = ""
            // or many others
        });
    });

答案 2 :(得分:0)

除了@KKRocks答案之外,在大多数情况下,不需要填充所有500行的表格,只能填充50并在滚动到底部时动态添加单元格。

答案 3 :(得分:0)

认为你正在使用

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

用于细胞创建和数据设置的数据源方法。我的建议是仅使用数据源方法来创建单元格。然后使用

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

委托设置数据的方法。使用此示例代码

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

MyWishListTableViewCell *cell = [tableView 
dequeueReusableCellWithIdentifier:@"Order_Cell_Indntifire" 
forIndexPath:indexPath];
return cell;
}

}

    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

{

 if ([cell isKindOfClass:[MyWishListTableViewCell class]])
 {
MyWishListModel* data = [_myWishListArray objectAtIndex:indexPath.row];
 MyWishListTableViewCell *cell1 = (MyWishListTableViewCell*)cell;
 [cell1 setUpData:data];
}

}