2010-08-21 26 views
0

我有被添加到当前视图像这样的viewController:释放和重新分配一个viewController?

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

现在 - 当用户关闭这一新的观点,我从上海华删除它。

虽然用户可能会点击按钮来显示该视图两次。但是当我这样做时,detailController第二次获得了分配,我得到了两个保留计数。

当我第一次发布的DetailView,我获得第二次点击一个n错误...

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

回答

0

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

+0

不要问这个问题 - 只是不要问它... :) – Swissdude 2010-08-22 00:36:29

+0

为什么我说错了什么? – alecnash 2010-08-22 00:39:21

0

我找到了解决办法 - 想我真的应该重新阅读有关内存管理的章节(又一次)...

诀窍是改变ALLOC线这样的:

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

这与当前设置的«theDetail»交换一个新的,自动释放旧的(如文档清晰的状态 - 谁可以阅读有明确的优势:)

0

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

但是 - 如果你确定要做到这一点,我建议你存储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