私はMultiViewアプリケーションを持っていますが、いくつかのメモリに関する懸念があり、助言をいただきたいと思います.. 私はいくつかのビュー間でユーザーが変更できるようにするスイッチコントローラを最初にロードするアプリケーションを持っています。アプリケーションのいくつかの時点で、私はswitchviewコントローラを削除し、別のサブビューをウィンドウに追加したいと思います。したがって、共有アプリケーションのデリゲートにアクセスでき、switchviewコントローラを削除して2番目のものを挿入しました。これが正しいアプローチであれば、2番目のコントローラのretainCount値を出力するのでメモリリークが発生することになります。iOS - MultiViewアプリケーション - メモリに関する問題
以下は私のコードのスナップショットです。これは正しいアプローチですか?これらのメモリリークを回避するにはどうすればよいですか?私はまた、.mファイルのプロパティ
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
として設定された2つのビューコントローラを持っている私のApplicationDelegateで[OK]を
私は、これらのコントローラを合成し、それらを解放しています
[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.secondController retainCounter]を印刷すると、私は19になります。これは正しいアプローチです。実際にメモリリークがありますか?
事前のおかげで、
アンドレアス
オブジェクトの保持カウントは使用しないでください。ほとんどの場合、混乱の原因となることはほとんどありません。 – Mats
チップをおかげさまでありがとう..まだ、これは私のアプリケーションデリゲートのウィンドウに別のサブビューを読み込むための正しいアプローチだとお考えですか?それはメモリが安全ですか? – andreasv