我正面临一个关于一个模块的问题让我清楚了解相同的流程。
我有一个自定义的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];
}
和dealloc
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:KGotSomething
object:nil];
}
现在我的应用程序由于此通知而崩溃,并且永远不会调用dealloc。
你们可以帮助我,如何让这个工作或者我在这里做错什么......
谢谢,
Sagar的
答案 0 :(得分:6)
您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];
}