【问题标题】:Get dynamic tableview cell height and autorelease获取动态表格视图单元格高度和自动释放
【发布时间】:2014-09-12 16:48:17
【问题描述】:

我正在尝试像这样设置动态表格视图单元格高度。在 layoutSubviews 内部,它将设置 cellHeight。

我的问题是,如果我们创建这样的单元格(可能是 100 行),这些单元格会自动释放吗?还是会留在记忆中?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (tableView == self.tblInspiration)
    {
    if (indexPath.section == 0)
    {
            TitleCell* cell = (TitleCell*)[self tableView:tableView cellForRowAtIndexPath:indexPath];
            [cell layoutSubviews]; 
            float height = cell.cellHeight;
            cell = nil; 
            return height;
        }

    }
 }

如果我不使用它并且只返回恒定高度(例如 100),则内存使用量为 25。如果我使用,它大约为 40,并且永远不会减少。这意味着有内存使用。这是对的吗?最好的方法是什么?

【问题讨论】:

    标签: ios objective-c uitableview


    【解决方案1】:

    是的,那些细胞自动释放。

    更好的方法是

    float cellHeight = cell.cellHeight;
    cell = nil;
    return cellHeight;
    

    【讨论】:

    • 我用了你的方法,还是没有减少。如果我只是返回常量(例如 100),它会减少。
    • 是的,它减少了行但是你想减少什么?
    • 哦,我的意思是如果我也使用您的建议,内存使用量不会减少。我可以知道该怎么做吗
    【解决方案2】:

    您不应该在heightForRowAtIndexPath 中使用cellForRowAtIndexPathcellForRowAtIndexPath 将尝试重用已创建的单元格,如果有适合当前情况的单元格,如果不是,表格视图将创建新单元格,这些新单元格将永远不会被使用,但它们仍然使用内存,这就是为什么你的内存不减少。

    我建议您为您的TitleCellalloc 创建一个成员变量,并在heightForRowAtIndexPath 中使用相同的单元格(在其上设置适当的值并计算高度)。

    【讨论】:

    • 我不确定你的意思。如果我们只使用一次 TitleCell 并分配一次,它仍然会在 heightForRowAtIndexPath 中创建一个新的。需要在 heightForRowAtIndexPath 和 cellForRowAtIndexPath 之间共享单元格。这是对的吗?如果可能的话,你能用代码解释一下吗? (伪代码也可以)。
    • @KhantThuLinn 您只会分配一个单元格一次,在您当前的实现中,您将为每一行(可见行)分配一个单元格。此外,您必须知道在调用cellForRow 之前,所有行都调用了heightForRow
    • 谢谢。我会试试的
    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多