このケースの場合、-viewDidDisappear
(-viewWillDisappear
ではなく、まだオンスクリーンです)で行うべき最良のことは、self.view = nil
です。それは、ビューコントローラ全体のビューをダンプします。ビューは、次に必要なときに自動的にリロードされます。
これらのビューにIBOutletがある場合は、それらをnilに設定する必要があります。そうしないと、リリースされません。あなたはこのようなセットアップを持っていると仮定すると:
@interface MyViewController : UIViewController
{
UIImageView *_imageView;
}
@property (readwrite, retain) IBOutlet UIImageView *imageView;
@implementation MyViewController
@synthesize imageView = _imageView;
次に、あなたの `-viewWillDisappearでself.imageView = nil
を呼び出す必要があります。
通常、あなたのアクセサリー以外の場合は、をイヤーズに、-dealloc
には電話しないでください。それらを解放する正しい方法は、アクセサを使用してそれらをnilに設定することです。
-release
の場合、retainCountが1の場合は即座にfree()
が呼び出され、メモリが回復します。ただし、自動解放プールを含む他のオブジェクトがオブジェクトを保持している可能性があるので、保持カウントが特定の時点で何であるかは不明です。
私は、変数をリリースしてすぐにそれをnilに設定することを強く勧めます。これは変数には影響しません。あなたが解放したポインタを追いかけることからあなたを守り、未割り当てのメモリを指し示すかもしれません。あなたは-viewDidDisappear本当に>>>「あなたは `-viewWillDisappearにself.imageView = nilを呼び出す必要があります次に」
[_stuff release]; _stuff = nil;
[_otherStuff release]; _otherStuff = nil;
ません:だから
-dealloc
で、私はこのような行がありますか? – Thanks申し訳ありません。後方に。ビューの削除に関係するすべての操作は、viewDidDisappearで行う必要があります。あなたは物事を落とし始めるためにあなたがオフスクリーンになるまで待つべきです。 viewWillDisappearにUIコンポーネントをドロップすると、アニメーションが乱れることがあります(viewWillDisappearとviewDidDisAppearの間でアニメーションを作成するため)。 –