tableView中的reloadData使性能变慢

时间:2012-01-13 01:28:13

标签: iphone

我正在处理表格视图,我遇到了一个问题,即我的表格正在减速以显示数据。我编码的是

-(void) loadView {
     getDataForTableView();
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return items.count;
}
-(void) getDataForTableView {
    // This method will do some stuff and will return the count of items
    [self.tableView reloadData]
}

我的表格可以重新加载,然后在表格视图中显示项目的内容。但是,这需要一段时间才能完成。我们如何加快进度,以便表视图更快地显示数据?

更新

我做的是:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"shoppingListCell";
    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    MyCustomCell.totalLabel.text = numberAsString;
    MyCustomCell.comment.text = currentItem.comment;
    return MyCustomCell;
} 

1 个答案:

答案 0 :(得分:0)

如果您的getDataForTableView()方法正在执行服务器请求,则在主线程上,所有UI都将冻结,直到请求返回。如果是同步请求。如果它是异步的,但你的应用程序仍然在等待它重新加载数据,它将不会是一个UI冻结,但接口只是在等待某些东西。

我会在不同的线程上或使用NSInvocationOperation执行请求,并在请求返回时让它发布通知/调用回调。只需确保通知处理程序通过performSelectorOnMainThread与UIKit对象进行任何/全部通信。 Apple规定所有UIKit代码必须在主线程上执行,虽然向其他线程上的UIKit对象发送消息不一定会导致应用程序崩溃或导致编译器警告,但这会导致非常不可预测的行为(也可能导致崩溃)。

从用户界面的角度来看,如果必须仅在显示表格视图时执行请求(出于某些正当理由),请确保显示“加载”活动指示符(请参阅UIActivityIndi​​catorView)或其他一些东西。

但理想情况下,您应该在表格显示之前加载数据并将其缓存在后台。并定期检查它是否过时,并在需要时从服务器获取更新的数据。想想foursquare或Path如何在他们的应用程序中使用场地数据。