释放和重新分配一个viewController?
问题描述:
我有被添加到当前视图像这样的viewController:释放和重新分配一个viewController?
theDetail = [[detailController alloc] initWithNibName:@"detail" bundle:[NSBundle mainBundle]];
[self.view addSubview:theDetail.view];
现在 - 当用户关闭这一新的观点,我从上海华删除它。
虽然用户可能会点击按钮来显示该视图两次。但是当我这样做时,detailController第二次获得了分配,我得到了两个保留计数。
当我第一次发布的DetailView,我获得第二次点击一个n错误...
任何人谁可以告诉我这样做的正确方法?
答
为什么不使用导航控制器来加载视图?
答
我找到了解决办法 - 想我真的应该重新阅读有关内存管理的章节(又一次)...
诀窍是改变ALLOC线这样的:
self.theDetail = [[[detailController alloc] initWithNibName:@"detail" bundle:[NSBundle mainBundle]] autorelease];
这与当前设置的«theDetail»交换一个新的,自动释放旧的(如文档清晰的状态 - 谁可以阅读有明确的优势:)
答
我也建议使用导航控制器。
但是 - 如果你确定要做到这一点,我建议你存储theDetail作为一类范围的变量,然后你可以使用类似以下内容:
if (theDetail == nil) {
theDetail = [[detailController alloc] initWithNibName:@"detail" bundle:[NSBundle mainBundle]];
[self.view addSubview:theDetail.view];
}
+0
我真的会建议这样做而不是autorelease。 初始化一个对象需要处理能力,所以如果你不需要初始化一个新的对象,那么不要...... – 2010-08-22 00:42:09
不要问这个问题 - 只是不要问它... :) – Swissdude 2010-08-22 00:36:29
为什么我说错了什么? – alecnash 2010-08-22 00:39:21