释放并重新分配viewController?

时间:2010-08-21 21:55:25

标签: iphone uiview release subview

我有一个viewController,它被添加到当前视图中:

theDetail = [[detailController alloc]  initWithNibName:@"detail" bundle:[NSBundle mainBundle]];
[self.view addSubview:theDetail.view];

现在 - 当用户关闭此新视图时,我将其从超级视图中删除。

用户可能会点击按钮以显示此视图两次。但是当我这样做时,detailController第二次被分配,我得到一个保留计数为2。

当我首先发布detailView时,第二次点击时出现n错误...

任何可以告诉我正确方法的人都会这样做吗?

3 个答案:

答案 0 :(得分:0)

为什么不使用导航控制器加载视图?

答案 1 :(得分:0)

我找到了解决方案 - 猜我真的应该再次阅读关于内存管理的章节(并再次)......

诀窍是将alloc-line更改为:

self.theDetail = [[[detailController alloc]  initWithNibName:@"detail" bundle:[NSBundle mainBundle]] autorelease];

这会将当前设置的«theDetail»与新的一起交换,自动发布旧的(如文档清楚地说明 - 可以阅读的人有明显的优势:)

答案 2 :(得分:0)

我还建议使用导航控制器。

然而 - 如果您确定要这样做,我建议您将详细信息存储为类范围的变量,然后您可以使用以下内容:

if (theDetail == nil) {
    theDetail = [[detailController alloc]  initWithNibName:@"detail" bundle:[NSBundle mainBundle]];
    [self.view addSubview:theDetail.view];
}