在iphone sdk中分配已经分配的变量

时间:2012-02-09 09:39:26

标签: iphone ios memory-management memory-leaks ios-simulator

我想为已经分配的变量分配内存。例如

        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]; 

2 个答案:

答案 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];