私はMultiViewアプリを持っていて、メモリに関する懸念があります。アドバイスをいただければ幸いです。ユーザーがいくつかのビューを切り替えることができるスイッチコントローラーを最初にロードするアプリケーションがあります。アプリケーションのある時点で、switchviewコントローラーを削除し、ウィンドウに別のサブビューを追加したいのですが、共有アプリケーションのデリゲートにアクセスし、switchviewコントローラーを削除して、2番目のコントローラーを挿入しました。わかりません。これが正しいアプローチであり、2番目のコントローラーのretainCount値を出力すると、19が表示されるため、メモリリークが発生するのではないかと心配しています。
以下は私のコードのスナップショットです。これは正しいアプローチですか?これらのメモリリークを回避するにはどうすればよいですか?
ApplicationDelegateには、プロパティとして設定した2つのViewControllerがあります。
MyAppDelegate.h
@class SwitchViewController;
@class SecondController;
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
SwitchViewController *switchViewController;
SecondController *secondController;
}
@property (nonatomic, retain) IBOutlet SwitchViewController *switchViewController;
@property (nonatomic, retain) IBOutlet SecondController *secondController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
追加する.mファイルに
[self.window addSubview:switchViewController.view];
[self.window makeKeyAndVisible];
これらのコントローラーを合成し、dealloc関数で解放していることに注意してください
これが私の問題です!SwitchViewController.mで、アプリのデリゲートにアクセスしたいのですが、現在のSwitchViewControllerを削除し、ウィンドウのサブビューとしてsecondControllerを配置します。
SwitchViewController.m
SecondController *secondController2= [[SecondController alloc] init];
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.switchViewController.view removeFromSuperview];
appDelegate.secondController = secondController2;
[appDelegate.window addSubview:appDelegate.secondController.view];
[secondController2 release];
ここに質問があります。[appDelegate.secondControllerretainCounter]を出力すると19になります。これは正しいアプローチですか。実際にメモリリークが発生していますか?
前もって感謝します、
アンドレアス