4

我想在 UITableview 中加载大约 6000 - 8000 行。我使用异步调用从服务器获取数据,当我获取数据时我调用

[tableView 重载数据]

这是为了刷新表格视图。但是由于某种原因,我的应用程序卡住并冻结了。当我调试时,我发现 cellforrowatindexpath 被调用了 6000 次(在主线程上)并且 dequeueReusableCellWithIdentifier 总是返回 null 。

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath{
       CDTableRowCell *cell = nil;

        // Create and Resue Custom ViewCell
        static NSString *CellIdentifier = @"CellIdentifier";
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        // got into render/theme objec 
        if(cell == nil){
            cell = [[CDTableRowCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        }

// MODIFYING CELL PROPERTIES HERE FROM AN ARRAY
// NO HTTP CALLS 

}

此外,一旦我开始滚动,tableview 就会开始重用单元格,但在此之前我从不总是创建一个新单元格。任何线索为什么会出现这种奇怪的行为???

4

2 回答 2

0

您问题中的方法不是表格视图数据源方法。数据源方法将表视图作为参数。您编写的方法是一种可用于从 tableView 本身获取单元格的方法,而不是从数据源中获取新单元格的方法。

我不知道该方法被调用的频率,但覆盖它几乎肯定不是您想要做的。

我猜你已经将 uitableview 子类化为它自己的数据源?如果是这样,您需要在数据源方法中包含问题中的代码tableView:cellForRowAtIndexPath:,而不是像现在那样覆盖该方法。

于 2012-09-01T07:26:56.497 回答
0

试试这样

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

    static NSString *CellIdentifier =@"Cell";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

}

return cell;

}
于 2012-09-01T06:20:54.513 回答