2011-09-09 7 views
1

私は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になります。これは正しいアプローチです。実際にメモリリークがありますか?

事前のおかげで、

アンドレアス

+0

オブジェクトの保持カウントは使用しないでください。ほとんどの場合、混乱の原因となることはほとんどありません。 – Mats

+0

チップをおかげさまでありがとう..まだ、これは私のアプリケーションデリゲートのウィンドウに別のサブビューを読み込むための正しいアプローチだとお考えですか?それはメモリが安全ですか? – andreasv

答えて

1

あなたのアプローチは健全に見えますが、それをeyeballingよりもテストするためのより良い方法があります。あなたのMacに付属のインストゥルメントツールを使用して、漏れがあるかどうかをテストします。

また、サイドノートとして、遷移

[UIView transitionFromView:appDelegate.switchViewController.view 
        toView:appDelegate.secondController.view 
        duration:1.0 
        options:UIViewAnimationOptionTransitionNone 
       completion:nil]; 

を行うためのよりよい方法があるが、この情報がお役に立てば幸いです。

+0

Silvaeこれは非常に役に立ちます、あなたの答えをありがとう!私は目を見張るだけではなく、私は実際に漏れが見つからないInstrumentsツールを使用しました。私はちょうど私が正しいアプローチを使用していると信じていません。ちょうど右のように見えません – andreasv

+0

楽器がそれは私が心配することはあまりないと言うよりも正しいと言う場合。 – Silvae

+0

大丈夫、ありがとうございます:) – andreasv

関連する問題