将内存分配给已经分配的变量?

时间:2012-02-06 04:44:39

标签: iphone ipad ios4

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

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

4 个答案:

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

绝对没问题