2011-12-03 3 views
0

この質問を閉じたり、重複して言及したりしないでください。ViewController to Navigationコントローラを追加すると、retain Countが増えますか?

私の理解を確認するためにあなたの助けが必要です。

これは、Navigation Controllerに追加されたVIEWコントローラに適用されます。 RayNewbiethreadには、View Controllerのインスタンスを保持すると保持カウントが+2になり、ポップすると保持カウントが1減らされることが記述されているので、deallocは決して呼び出されません。

彼の議論は正しいですか?

それが正しければ、彼らは以下の場合には当てはまらない:

は今、私はAppDelegateクラスのIVARように2つのVCを持っている:

@property (retain, nonatomic) UserDetailsViewController *userdetailsVC; 
@property (retain, nonatomic) PayDetailsViewController *paydetailsVC; 

userdetailsVC = [[UserDetailsViewController alloc] initWithNibName:kuserDetailsVC bundle:nil]; 

paydetailsVC = [[PayDetailsViewController alloc] initWithNibName:kpayDetailsVC bundle:nil]; 

私は.Mでアイバーズを合成ファイル。

ユーザーの操作に基づいて、上記のVCのいずれかをウィンドウのルートビューコントロールに設定しました。

-(void)method1{ 

self.window.rootViewController = userdetailsVC; 

} 

-(void)method2{ 

self.window.rootViewController = paydetailsVC; 

} 

ここで私がルートビューコントローラを設定する方法は何ですか?

答えて

2

はい、ナビゲーションコントローラにビューコントローラを追加すると、保持カウントが追加されます。ナビゲーションコントローラは、ビューコントローラの配列を保持します。そこにビューコントローラを追加すると、この配列に追加されます。この配列は、pushViewControllerおよびpopViewControllerの呼び出しで使用される配列です。

しかし、あなたがalloc'ingしている方法は、推薦された方法ではありません。 これがより適切です:

UserDetailsViewController* u = [[UserDetailsViewController alloc] initWithNibName:kuserDetailsVC bundle:nil]; 
self.userdetailsVC = u; 
[u release]; 
PayDetailsViewController *p = [[PayDetailsViewController alloc] initWithNibName:kpayDetailsVC bundle:nil]; 
self.paydetailsVC = p; 
[p release]; 

希望すると助かります。

+0

私はself.window.rootViewControllerにどのように割り当てていますか? – Krishnan

+0

これはView ControllerのiVarの提案ですか? – Krishnan

+0

はい、これはretainを持つプロパティを持つiVarの提案です。あなたのメソッドでは、2つのiVarsがすでに保持されていて、その上にallocを実行していたので、本質的に保持数をgoto 2にカウントしていました。 – Anshu