私は私のアプリに次のコードを何度も使用しています(特にNavigationControllerを管理する):[[UIApplication sharedApplication] delegate]オブジェクトはいつリリースすればよいですか?
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
私はそれを解放する必要がありますか?助けるため
Thxを、
ステファン
私は私のアプリに次のコードを何度も使用しています(特にNavigationControllerを管理する):[[UIApplication sharedApplication] delegate]オブジェクトはいつリリースすればよいですか?
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
私はそれを解放する必要がありますか?助けるため
Thxを、
ステファン
にはありません。 はアプリケーションの委任を解放しません。これはOSによって自動的に管理されます。
アプリのmain.mファイルを見ると、アプリを表すUIApplication
のインスタンスを初期化するコードが表示されます。これは、アプリケーションの委任者のライフサイクルを管理する責任であり、自分の責任ではありません。
EDIT @Gozとして、release
あなたはretain
です。しかし、アプリケーションオブジェクト(したがって、その代理人は拡張機能)がアプリケーションの寿命の範囲内にとどまることが保証されているので(あなたはそれに悩まされます)、単にではないはメモリ管理を行いますこれにより、偶発的な過度のリリースやその他の関連する問題の可能性が回避されます。
短い回答:決してアプリケーションデリゲートをリリースしないでください。
説明:
私は物事が宣言されているか確認したときにそれは多くの場合、MEM-MGMTの問題に対処する方法を私に役立ちます。 delegate
プロパティがUIApplication
のために宣言されているかを見てみましょう:
@property(nonatomic,assign) id<UIApplicationDelegate> delegate;
あなたが見ることができるように、それはここで行われたすべてのMEM-MGMTだけで、インスタンス変数のポインタを割り当てている意味割り当てられたプロパティです。つまり、アプリケーションデリゲートのrelease
を呼び出すと、MyAppDelegate
に対して-dealloc
メソッドが実行されます。デバッガでこれを試してみると、アプリケーションにEXC_BAD_ACCESSが送られることがわかります。つまり、クラッシュします。
編集:しかし、Gozが示唆しているように、retain
としてからrelease
と呼ぶことができます。しかし、最初に、これを行うには意味がありませんretain/release
アプリデリゲートのもの。
私は、決してないと思います。 – rptwsthi