我想为已经分配的变量分配内存。例如
self.m_tabbarController = [[TabbarController alloc] init];
我必须为上面的tabbar controller更改已分配的视图控制器。所以我必须释放 以上并使用新控制器分配相同的tabbar。我该如何发布和分配 如果我执行以下操作,请在IOS5中发生崩溃
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 :(得分:0)
试试这个
<。>在.h中声明“my_tabBarController”,@property(nonatomic,retain)my_tabBarController;
in .m
@synthesize my_tabBarController;
如果要分配新的视图控制器,只需创建另一个TabbarController实例并分配给现有的实例。
TabbarController *secondTabBar=[[TabbarController alloc]init];
self.my_tabBarController=secondTabBar;
[secondTabBar release];
并且不要忘记在dealloc
中发布my_tabBarController答案 1 :(得分:-1)
要重新分配@property
类型的(retain)
,您不得明确发布
//this is wrong
if(self.m_tabbarController != nil)
{
[self.m_tabbarController release];
}
/////////////////////
只有这一行才能正常重新分配。
self.m_tabbarController = [[TabbarController alloc] init];
原因是 - &gt;对于(retain)
属性,当我们执行self.obj = nil或(新分配)时,表示
[obj release];
obj = nil or (new allocation)
你的应用程序崩溃,因为m_tabbarController
由于显式和隐式释放而面临双重释放。您第一次明确呼叫[self.m_tabbarController release];
时发布,下一次隐式发布在分配时发生self.m_tabbarController = [[TabbarController alloc] init];