gpt4 book ai didi

iphone - 解决内存泄漏后 dequeueReusableCellWithIdentifier

转载 作者:行者123 更新时间:2023-12-03 21:24:00 25 4
gpt4 key购买 nike

我在我的一个 TableView 中使用仪器发现了内存泄漏,恰好在这一行:

[[NSBundle mainBundle] loadNibNamed:@"ShopListCell" owner:self options:NULL];

Nib ShopListCell 中的标识符与 CellIdentifier 不正确。

现在,我没有内存泄漏,但我的 UITableViewCells 有自己的生命:-)

我正在使用自定义 UITableViewCell,并显示一些图像并更新 NSFetchedResultsController 中的一些标签。

当用户单击一行时,我会更新模型,因此单元格始终显示要显示的真实数据,但是,它不会显示真实数据,而是显示其他一些单元格。

我怀疑这是因为我重复使用了单元格,但我在返回单元格之前对其进行了所有修改,因此我希望始终显示正确的数据。

在修复内存泄漏之前,这是完美的,我总是使用一个新单元,现在我重新使用它们,但有很多问题。

[cell setNeedsDisplay];返回单元格之前没有任何效果。

这是一些代码:

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

static NSString *CellIdentifier = @"ShopListCell";

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

[[NSBundle mainBundle] loadNibNamed:@"ShopListCell" owner:self options:NULL];
cell = nibLoadCell;

cell.backgroundColor = [UIColor clearColor];

}

// Set up the cell...

Ingredient *ingredient = (Ingredient *)[fetchedResultsController objectAtIndexPath:indexPath];

NSLog(@"Section %d Row %d ingredient: %@", indexPath.section, indexPath.row,ingredient.name); // just to be sure it fetchs the correct data, and it does


if([ingredient.isInListDone intValue] == 0) {
cell.accessoryType = UITableViewCellAccessoryNone;
[cellStateButton setSelected:NO];
cellImageInList = nil;

}
else {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[cellStateButton setSelected:YES];
cellImageInList.image = [UIImage imageNamed:@"underlined2.png"];

}

cellLabelName.text = [ingredient name];

[cell setNeedsDisplay]; // this line has NO effect

return cell;
}

此外,我还放置了一个 NSLog,它会在正确的部分和行获取正确的数据...

谢谢

r。

最佳答案

您正在创建一个单元格

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

然后将单元格变量分配给其他内容

cell = nibLoadCell;

第一行基本上没有任何作用。我猜想从 Nib 加载的单元格仍然没有正确设置其单元格标识符。看这里: Loading a Reusable UITableViewCell from a Nib

关于iphone - 解决内存泄漏后 dequeueReusableCellWithIdentifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2230260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com