gpt4 book ai didi

iphone - 由于 PostNotification 导致 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-12-03 19:37:50 25 4
gpt4 key购买 nike

我面临一个有关某个模块的问题,让我清理一下该模块的流程。

我有一个自定义的 UITableviewCell。

当我收到一些新信息时,我会发布一条通知

[[NSNotificationCenter defaultCenter] postNotificationName:KGotSomething object:nil userInfo:message];

鉴于我维护表格的位置,我正在启动自定义单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
cell= [[CustomCell alloc] initWithFrame: reuseIdentifier:identifier document:doc];
return cell;
}

现在位于customcell.mm

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier 
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(GotSomething:)
name:KGotSomething
object:nil];
}

并在释放中

- (void)dealloc 
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:KGotSomething
object:nil];
}

现在我的应用程序由于此通知而崩溃,并且永远不会调用 dealloc。

你们能帮我吗,如何让它工作或者我在这里做错了什么......

谢谢

萨加尔

最佳答案

您的initWithFrame:reuseIdentifier:dealloc方法不完整。是故意的吗?

initWithFrame:reuseIdentifier: 应包含对 super 的调用:

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier 
{
self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(GotSomething:)
name:KGotSomething
object:nil];
}
return self;
}

dealloc:

- (void)dealloc 
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:KGotSomething
object:nil];
[super dealloc];
}

更新

单元格在创建后不会自动释放。所以单元格正在泄漏并且永远不会被释放。代码应该是:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
cell= [[CustomCell alloc] initWithFrame: reuseIdentifier:identifier document:doc];
return [cell autorelease];
}

关于iphone - 由于 PostNotification 导致 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3043867/

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