UITableView insertRowsAtIndexPaths:WithRowAnimation没有冻结UI

pas*_*i86 1 multithreading objective-c uitableview grand-central-dispatch ios

我尝试理解UITableView当表格可见时,当我处理大量行时要使用的最佳实践.

这是我的行为:

我有一个UITableView和一个线程试图将数据插入此表.我认为[UITableView reloadData]对于性能方面做一个糟糕的解决方案,我知道UIKit操作是在主线程上进行的,因此当数据源更新完成时我试图发送一个NSNotification进行UITableView更新操作(beginUpdate - insertRowAtIndex - endUpdate)在主线程上,但这种技术冻结了用户界面.我必须处理1000多行.

有人已经解决了这个问题吗?是否可以使用GDC异步和同步?如果有,怎么样?提前致谢.

sim*_*one 11

你这样试试:

dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView beginUpdates];
        [self.tableDatalist insertObject:obj atIndex:index];

        [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:0]]
                              withRowAnimation:UITableViewRowAnimationRight];
        [self.tableView endUpdates];
    });
Run Code Online (Sandbox Code Playgroud)