1

非常基本的 cellForRowAtIndexPath 实现。

我想知道为什么分析器告诉我我在这里泄漏内存。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

    MyObject *object = [[self.datasource objectForKey:key] objectAtIndex:indexPath.row];

    cell.textLabel.text = object.title;

    return cell;
}

分析仪告诉我“细胞”可能会泄漏。这只是分析仪的一个弱点还是我应该如何处理?

注意:像这样添加对 autorelease 的调用:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier] autorelease];

导致崩溃。有什么想法吗?

4

2 回答 2

1

如果你不使用 ARC,那么你应该自动释放单元格:

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

请注意,这与从 检索它后自动释放它不等效dequeueReusableCellWithIdentifier:,因为该方法会为特定单元格多次调用,并且过度自动释放会导致崩溃。

于 2012-11-20T17:39:55.693 回答
0

您应该将自动释放放在分配新单元格的行上:

 cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
于 2012-11-20T17:41:51.130 回答