我有一个viewController,它被添加到当前视图中:
theDetail = [[detailController alloc] initWithNibName:@"detail" bundle:[NSBundle mainBundle]];
[self.view addSubview:theDetail.view];
现在 - 当用户关闭此新视图时,我将其从超级视图中删除。
用户可能会点击按钮以显示此视图两次。但是当我这样做时,detailController第二次被分配,我得到一个保留计数为2。
当我首先发布detailView时,第二次点击时出现n错误...
任何可以告诉我正确方法的人都会这样做吗?
答案 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];
}