我想为已经分配的变量分配内存。例如
self.m_tabbarController = [[TabbarController alloc] init];
我必须为上面的tabbar controller更改已分配的视图控制器。所以我必须释放 以上并使用新控制器分配相同的tabbar。我该如何发布和分配 新的。如果我做以下情况,就会发生崩溃。
if(self.m_tabbarController != nil)
{
[self.m_tabbarController release];
}
self.m_tabbarController = [[TabbarController alloc] init];
但是自变量必须在dealloc方法中被释放。有什么帮助吗?如果我也喜欢跟随它,它会崩溃吗?
m_tabbarController = [[TabbarController alloc] init];
[self.window addSubview:m_tabbarController ];
[m_tabbarController release];
答案 0 :(得分:2)
首先发布它。假设您的综合属性为retain
,实现将为您处理release
:
self.m_tabbarController = [[[TabbarController alloc] init] autorelease];
简而言之,除非在类中实现某种重新初始化方法,否则不能依赖某种方式重新初始化实例。
如果那是UIViewController
,只需创建一个新的UIViewController
,因为您需要了解很多有关实现,所有子类和所有成员/ ivars的信息才能正确实现重新初始化。有时您可以通过其公共属性完成此操作,有时您赢了;能够正确地重新初始化实例。
重新初始化的一个问题是你alloc
可能不会返回什么 - 而且你可能无法知道在所有情况下你正在处理什么类型。对复杂类型进行适当,详尽的重新实现会增加很多实现(这也往往是传递的)。
答案 1 :(得分:0)
您应该声明m_tabbarController
保留某种财产。
现在,修改您的代码如下:
TabbarController *temp = [[TabbarController alloc] init];
self.m_tabbarController = temp;
[temp release];
另外,将m_tabbarController
发布到dealloc
方法。
答案 2 :(得分:0)
self.m_tabbarController = nil;
TabbarController *tempController = [[TabbarController alloc] init];
self.m_tabbarController = tempController;
[tempController release];
tempController = nil;
答案 3 :(得分:-1)
[self.m_tabbarController release];
将发布m_tabbarController
而不是self
所以
if(self.m_tabbarController != nil)
{
[self.m_tabbarController release];
}
self.m_tabbarController = [[TabbarController alloc] init];
绝对没问题