2012-02-09 12 views
0

に私は私が持っている上記タブバーのcontroller.soに割り当てられたビュー・コントローラを変更する必要が私は、例えば既に割り当てする変数割り当てのiPhone SDK

 self.m_tabbarController = [[TabbarController alloc] init]; 

already.for割り当てられているため、変数のためのメモリを割り当てる必要上記の を解放し、新しいコントローラで同じタブバーを割り当てます。どのように私は解放しone.If私は次の操作を実行し 新を割り当てることができ、IOS5

でクラッシュに
if(self.m_tabbarController != nil) 
    { 
     [self.m_tabbarController release];  
    } 
      self.m_tabbarController = [[TabbarController alloc] init]; 

が、自己変数を与え、私はまた、次のように行うと、それが与える?のdeallocのmethod.anyのヘルプにしてくださいdeallcatedしなければなりませんクラッシュ? (retain)型である@propertyを再配分するため

m_tabbarController = [[TabbarController alloc] init]; 
    [self.window addSubview:m_tabbarController ]; 
    [m_tabbarController release]; 

答えて

-1

は、明示的に

//this is wrong 
if(self.m_tabbarController != nil) 
    { 
     [self.m_tabbarController release];  
    } 
///////////////////// 

をそれを解放してはならないだけで、このラインは、再割り当てのために正常に動作します。

self.m_tabbarController = [[TabbarController alloc] init]; 

理由は、ということです - >(retain)プロパティのために、我々はやるときself.obj = nilのか(新しい割り当て)、それは

[obj release]; 
obj = nil or (new allocation) 

あなたのアプリが直面しているm_tabbarControllerとしてクラッシュしていることを意味両方の明示的および暗黙的なリリースによる二重リリース。初めての割り当てself.m_tabbarController = [[TabbarController alloc] init];

+0

のdeallocでmy_tabBarControllerを解放することを忘れてはいけない[[TabbarControllerのalloc]のinit]; – nameless

+0

親愛なる@無名、最初に理由を読んでください。 – samfisher

+0

私の答えをバックアップするには、ここにリンクがあります:http://stackoverflow.com/questions/1210776/objective-c-difference-between-setting-nil-and-releasing、さらに強く運が良かった! – samfisher

0

の時にあなたが[self.m_tabbarController release];による明示的な呼び出し元のリリースであり、次の暗黙のリリースが起こっているのは、.hの宣言「my_tabBarController」に.M

@property(nonatomic,retain)my_tabBarController; 

をこの

をお試しください

@synthesize my_tabBarController; 

新しいView Controllerを割り当てる場合は、TabbarControllerとa既存のものに変更する。 .how iがself.m_tabbarController =として再度行うことができ、私は "self.m_tabbarController" のためにすでに割り当てられている

TabbarController *secondTabBar=[[TabbarController alloc]init]; 
self.my_tabBarController=secondTabBar; 
[secondTabBar release];