3

私はUITabBarControllerのサブクラスであるBaseViewControllerを持っており、このビューコントローラで私のビューを設定しています。View Controllerを解放すると、すべてのプロパティが解放されますか?

-(void)setUpViews 
{ 
FirstController *mainViewController = [[FirstController alloc] initAssignment:delegate.currentAssignment withMutableArray:myArray]; 
UINavigationController *firstNavController = [[UINavigationController alloc] initWithRootViewController:mainViewController]; 


SecondController *secondViewController = [[SecondController alloc] initWithNibName:@"SecondController" bundle:nil]; 
UINavigationController *secondNavController = [[UINavigationController alloc] initWithRootViewController:secondViewController]; 


self.viewControllers = [NSArray arrayWithObjects:firstNavController, secondNavController,nil]; 

firstNavController.tabBarItem.image = [UIImage imageNamed:@"blablabla.png"]; 
firstNavController.tabBarItem.title = @"Stream"; 


secondViewController.tabBarItem.image = [UIImage imageNamed:@"blabla.png"]; 
secondViewController.tabBarItem.title = @"Favourite"; 
} 

今、私は別のビューコントローラを持って、私はBaseViewControllerのサブクラス、ViewHandlerControllerそれを呼び出します。このviewHandlerの私のviewDidLoadには、BaseViewControllerで宣言されたsetUpViewsが呼び出されます。私のアプリケーションの最初の画面では、ログインボタンが押されたときに、私はViewHandlerControllerをインスタンス化し、使用してナビコントローラでTabControllerを成功裡に提示しました。

[[[UIApplication sharedApplication].windows objectAtIndex:0] addSubview:viewControllerHandler.view]; 

私のアプリの中に。ログアウトボタンがあります。私はNSNotificationCenterを使って私の最初の画面で宣言されたlogoutMethodを呼び出しています。私の質問は、このlogoutMethodでは、ユーザーが再度ログインできるようにするために以前に割り当てられたオブジェクトを解放するにはどうすればいいですか(logIn - logOut -logIn)? ARCを使用しているので、ViewControllerをNILに設定すると、すべてのクリーンアップが実行されますか?

EDIT:スーパービューから私のViewControllerHandlerを削除し、ゼロに設定されてもそのサブビューを解放するのに役立ちますか?

乾杯

答えて

2

あなたの質問に答えてください(ARCではなく)。いいえ、基本的なView Controllerはリリース時にプロパティをリリースしません。しかし、あなたはviewDidUnloadやdeallocメソッドであなたのプロパティを無視するべきです。

ARCを使用する場合は、コントローラを保持できるアクションがいくつかあり、削除できないことがあります。デリゲートのためのオブジェクトを取るメソッドを見て、彼らは弱い参照を使用していない可能性があります

1

は、このアップルarticle about memory managementを見てください。

autoreleaseをallocメソッドで使用するか、for (UIView *view in [self.view subviews]) {view release};deallocで使用することができます。実際のリリースで

enter image description here

保持する逆の動作です。保持すると、割り当てられたメモリのオブジェクトインスタンスが1カウント増加します。 alloc, copy, new, mutableCopyと呼ぶと起こります。 ARCを使用している場合、オブジェクトを解放することはできません。メモリ管理はあなたの問題ではありません。

+0

応答に感謝します。私の場合は、私はアークを使用して、私は減少させる/私のアプリのメモリ圧迫を避けたい。私が望むのは、私のアプリが大量のメモリを消費しているため、オブジェクトを緊急にリリースすることです。 – janusbalatbat

関連する問題