2011-09-10 14 views

答えて

7

にはありません。 はアプリケーションの委任を解放しません。これはOSによって自動的に管理されます。

アプリのmain.mファイルを見ると、アプリを表すUIApplicationのインスタンスを初期化するコードが表示されます。これは、アプリケーションの委任者のライフサイクルを管理する責任であり、自分の責任ではありません。

EDIT @Gozとして、releaseあなたはretainです。しかし、アプリケーションオブジェクト(したがって、その代理人は拡張機能)がアプリケーションの寿命の範囲内にとどまることが保証されているので(あなたはそれに悩まされます)、単にではないはメモリ管理を行いますこれにより、偶発的な過度のリリースやその他の関連する問題の可能性が回避されます。

+1

もちろん、あなたはそれを保持すると言います...それから解放される必要があります。 – Goz

+1

@Goz:本当ですが、なぜあなたはそれに電話をかけますか?それはアプリの寿命のために割り当てられることが保証されています(例えば、あなたがそれを解放するような愚かなことをしない限り...)単に保持/解放を避けるだけで、偶発的な過剰放出を簡単に防ぎます。 – Mac

+0

素敵なディスカッション+1。 :) – rptwsthi

0

短い回答:決してアプリケーションデリゲートをリリースしないでください。

説明:
私は物事が宣言されているか確認したときにそれは多くの場合、MEM-MGMTの問題に対処する方法を私に役立ちます。 delegateプロパティがUIApplicationのために宣言されているかを見てみましょう:

@property(nonatomic,assign) id<UIApplicationDelegate> delegate; 

あなたが見ることができるように、それはここで行われたすべてのMEM-MGMTだけで、インスタンス変数のポインタを割り当てている意味割り当てられたプロパティです。つまり、アプリケーションデリゲートのreleaseを呼び出すと、MyAppDelegateに対して-deallocメソッドが実行されます。デバッガでこれを試してみると、アプリケーションにEXC_BAD_ACCESSが送られることがわかります。つまり、クラッシュします。

編集:しかし、Gozが示唆しているように、retainとしてからreleaseと呼ぶことができます。しかし、最初に、これを行うには意味がありませんretain/releaseアプリデリゲートのもの。

関連する問題