2011-08-17 13 views
2

私はiPhone開発には初めてです。viewDidUnloadで解放すると、違いはありますか?

私のアプリでは、いくつかのボタンとラベルを使用しています。私はこれらのボタンとラベルをすべてdealloc関数で解放しています。
私もviewDidUnloadでそれらを解放しています。

- (void)viewDidUnload 
{ 
[super viewDidUnload]; 
self.ans1 = nil; 
self.ans2 = nil; 
self.ans3 = nil; 
self.ans4 = nil; 
self.button = nil; 
self.button2 = nil; 
self.button3 = nil; 
self.button4 = nil; 
} 

私は、それがメモリ管理には良いこと、またはメモリ管理に大きな違いがないことを知りたいだけです。
なぜそれを使用するのですか?

ありがとうございます。

答えて

3

はviewDidUnloadが呼び出されたときにアンロードのみ、そのれるビューコントローラはありません。 ビューコントローラは、割り当てが解除されるまで有効です。 viewDidUnloadで

、あなたは(ビューコントローラがビューを再作成する必要がある場合のviewDidLoadが再び呼び出されるので)とのviewDidLoadに再作成されますができビュー、すべての一部であるこれらのオブジェクトを解放する必要があります。これにはすべてのアウトレットが含まれます。これらの変数を過消去しないように、これらの変数をnilに設定する必要もあります。

deallocでは、viewDidUnloadに含まれているものも含めて、ビューコントローラーが保持するすべてのオブジェクトを解放する必要があるためです。

+0

をありがとうございました?? – iUser

+0

一般的には、ほとんどのアプリケーションで見られるように、deallocメソッドですべてを行うことができます。この質問に関しては、iamgeView、viewDidUnloadのscrollviewをリリースして、nilを設定することができます。 – PJR

+0

ありがとう!! ViewDidUnloadとdealloc関数でこれらのオブジェクトをリリースできますか?それともメモリリークの原因になりますか?任意の変数を解放し、それを "nil"に設定してから再びdeallocで解放すると、 "何も起こらない" ...しかし、変数を解放して "nilに設定しない"とし、再びdeallocで解放すると、viewDidUnloadの – iUser

1

メモリ管理には適しています。コントローラのアンロード時にViewコントローラに関連付けられたオブジェクトを解放すると、アプリケーションのメモリ占有量を効果的に減らすことができます。オブジェクトを使用していなくてもオブジェクトを保持すると、アプリケーションでメモリ警告が発生しやすくなります&最終的に終了します。

&のリリースをViewDidUnloadに割り当てることをお勧めします。

HTH、

Akshay

+0

私はUIImageView、NSInteger、NSArrayのとUIScrollViewのを使用している場合、私はviewDidUnloadでnilをそれらを作るために持っているので、あなたにAkshay :) – iUser

2

viewDidUnloadは、ビューの作成時に作成した可能性のあるものを解放するために使用されます。これはviewDidLoadに含まれているものを含みますが、xibファイル内から作成されるIBOutletプロパティも含みます。これらはすべて解放し、viewDidUnloadでnilに設定する必要があります。

他のものはすべてdeallocでリリースする必要があります。

考えられるのは、viewDidUnloadを呼び出してメモリを解放すると、viewDidLoadメソッドからビューを完全に再作成できます。

この質問も参照してください。

memory management on the iPhone with viewDidUnload

関連する問題