gpt4 book ai didi

ios - 当 UIView 成为 UITableViewCell 的委托(delegate)时,UIView 和 UITableViewCell 不会被释放

转载 作者:行者123 更新时间:2023-11-29 04:27:27 24 4
gpt4 key购买 nike

我有一个使用自定义 View (Horizo​​ntalMenuView)的 View Controller (EmbeddedMenuView)。嵌入式菜单 View 使用多个 Horizo​​ntalMenuView。 Horizo​​ntalMenuView 包含一个 UITableView。 TableView 中的每个单元格都使用相当多的内存(高质量图像)。

现在,每次触摸 Horizo​​ntalMenuView 中的 TableView 单元格的一部分时,我都需要执行任务。我通过在 TableView 单元格中创建一个协议(protocol)并为 Horizo​​ntalMenuView 分配其委托(delegate)来完成此操作。然后我在 Horizo​​ntalMenuView 中创建了一个协议(protocol),并为 EmbeddedMenuView 分配了它的委托(delegate)。因此,我将触摸事件传递给 EmbeddedMenuView。

问题是,当我分配单元格的委托(delegate)时,Horizo​​ntalMenuView 不会被释放。由于该 View 每次出现时都会自行刷新,因此内存占用很快就会失去控制。

如果我注释掉为单元格分配委托(delegate)的部分,则一切正常。

我的问题是:如何正确释放 UITableViewCell 的委托(delegate)?

这是 Horizo​​ntalMenuView 的代码片段:

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

//Custom Logic

HorizontalMenuItemTableViewCell *cell = (HorizontalMenuItemTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {

cell = [[[NSClassFromString([[AMPUIManager sharedManager] classNameForName:cellIdentifier]) alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];

cell.shouldAlwaysTransform = shouldAlwaysTransform;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.colorsDict = colorsDict;

if ([cell isKindOfClass:[ATCustomTableViewCell class]]) {
((ATCustomTableViewCell *)cell).delegate = self; //Commenting this out solves my problem.
}

}

//More Custom Logic



return cell;

}

PS 我正在使用手动引用计数。 ARC 不是该项目的一个选项。

最佳答案

听起来您可能有循环引用。您几乎总是希望对委托(delegate)使用“分配”约定。

参见:Why are Objective-C delegates usually given the property assign instead of retain?

关于ios - 当 UIView 成为 UITableViewCell 的委托(delegate)时,UIView 和 UITableViewCell 不会被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12134818/

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