2010-12-10 16 views
0
MyPlatesViewController* viewController = [[MyPlatesViewController alloc] initWithNibName:@"MyPlates" bundle:nil ]; 
[self.view addSubview:viewController.view]; 

その後、私は私のViewControllerUIViewControllerをcorectlyで削除するには?

[self.view removeFromSuperview]; 

を削除しても、機器が20メガバイトのメモリ

何が間違っているを示して漏れますか?

答えて

0

あなたはallocと呼ばれていますので、リリースするのはあなたの責任です。お使いのコントローラがあなたがaddSubviewを呼び出すときにビューによって保持し、あなたがremoveFromSuperviewを呼び出すときに放出されること

MyPlatesViewController* viewController = [[MyPlatesViewController alloc] initWithNibName:@"MyPlates" bundle:nil ]; 
[self.view addSubview:viewController.view]; 
[viewController release] 

注:あなたのコードは次のようになります。したがって現在のコードでは、removeFromSuperviewを呼び出した後もviewControllerの保持カウントは1です。

また、あなたがここにObjective-Cのメモリmanamentを確認する必要があります。http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html

+1

コントローラは、ビューを別のビューに追加するときにビューによって保持されません。ビューのみが保持されるため、上記のコードは問題を引き起こします。 – executor21

+0

本当にあなたは正しいです。元のポスターが予期しない方法でView Controllerを使用しているようです。 – DigitalBytes

1

をあなたはView Controllerオブジェクトをリークしました。スーパービューからビューを削除した後で、コントローラを解放する必要があります。

また、次の操作を実行できます。

[self presentModalViewController:viewController animated:NO]; 
[viewController release]; 

その後、dismissModalViewControllerが呼び出されたときに、ビューとビューコントローラの両方が適切に解放されます。

関連する問題