【问题标题】:Value stored to cell during its initialization is never read in cellForRowAtIndex method?在 cellForRowAtIndex 方法中永远不会读取初始化期间存储到单元格的值?
【发布时间】:2012-01-19 00:58:05
【问题描述】:

在我的 tableview 单元格中的应用程序中,我使用了以下代码行 当我的应用程序用于分析时,我得到了以下泄漏

代码:

-(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] autorelease];
    //}

    // Configure the cell...
}

我收到这样的错误:

在初始化期间存储到单元格的值永远不会被读取

【问题讨论】:

  • 你做了两次cell =,所以第一个分配当然丢失了。

标签: objective-c memory-management memory-leaks uitableview


【解决方案1】:

您在这一行中初始化名为“cell”的局部变量:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

然后您立即在下一行覆盖该值:

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

分析仪正在提醒您注意这一点。

在这种特殊情况下,这实际上不会导致泄漏。但这确实意味着您没有重复使用单元格,因此这会影响表格视图的性能。

如果你想删除这个警告而不担心 UITableView 的性能。那么你需要在上面的代码中添加 2 行代码。请遵循以下代码。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell!=nil)
    cell=nil;
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

以上代码将完美运行并删除警告。

【讨论】:

    【解决方案2】:

    您在这一行中初始化名为“cell”的局部变量:

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    然后您立即在下一行覆盖该值:

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

    分析仪正在提醒您注意这一点。

    在这种特殊情况下,这实际上不会导致泄漏。但这确实意味着您没有重复使用单元格,因此这会影响表格视图的性能。

    【讨论】:

    • 感谢回复我试过这个评论第一行它没有给出错误。
    • 你为什么要避免回收细胞?
    • //if (cell == nil) 你是说这行代码我有很多行吗
    • 好吧,你说的“第一行”是什么意思,你是说你不再得到分析器结果了吗?是你想要的吗?我将修复导致您的单元格被错误覆盖的错误。单元重用很重要,您不想为了避免修复单元重用中的错误而牺牲这一点。
    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2013-11-22
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多