1

私はiPadアプリケーションを完成させています。私にとって、それはdeallocクラスのすべてのメソッドに入力することを意味します。

私のペン先には多くのビューがあり、それらのほとんどにはサブビュー(つまりUIView、s、UILabelsなど)が含まれています。親を解放する前に子ビューを解放する必要がありますか?親ビューが解放された場合、その子ビューも解放されますか?

サンプル:

-(void)dealloc
{
    [super dealloc];
    [childView release];  // Do I need this if I use the next line?
    [parentView release];  // Will this perform the line above?
}

childViewとは両方ともparentView私のViewControllerのプロパティです。両方とも保持されています。

4

3 に答える 3

9

メモリ管理のバランスをとるために、(明示的に、または保持されたプロパティを介して) 保持したものはすべて解放する必要があります。

[super dealloc]また、実装の最初ではなく、最後に呼び出す必要がありますdealloc(たとえば、その時点でまだ利用可能なスーパークラス リソースに依存している可能性があるため)。

于 2011-01-05T18:44:41.610 に答える
2

ところで、アプリでの作業が完了するまで、dealloc-writing を保存するのは逆の方法です。大掃除のように思えるかもしれませんが、実際には、メモリを適切に管理するまでは、アプリの実際のパフォーマンスについて非常に偏った見方をすることになります。

理想的には、@synthesize ステートメントを作成するときに dealloc 呼び出しを作成する必要があります。つまり、クラスにプロパティを追加し、それを保持プロパティとして設定し、その @synthesize および -release コードを記述します。そうすれば、メモリ管理が基本的にクリーンであることがわかり (つまり、とにかくクラス プロパティ レベルで)、自信を持ってコーディングできます。

于 2011-01-05T19:08:53.833 に答える
1

NIBからのサブビューがあることを指定したので、この方法にも細心の注意を払う必要があるようですviewDidUnload

ペン先から自動的に割り当てられるビューは、アウトレットをnilに設定することで暗黙的に解放できます。例えば:

- (void)viewDidUnload {
    [super viewDidUnload];
    self.subviewOutletOne = nil;
    self.subviewOutletTwo = nil;
}

次に、明示的に保持しているオブジェクトについて、計画しているように、deallocメソッドでそれらを解放します。

- (void)dealloc {
    [myDataArray release];
    [coolAnimatedImage release];
    [myCustomSubview release];
    [super dealloc];
}

また、 LEAKSインストゥルメントも必ずチェックしてください。これは、組み込みのリーク分析ツールを使用するためのランダムなチュートリアルです。他の/より良いものがあるかもしれません。初めて立ち上げて実行するのは苦痛かもしれませんが、それだけの価値はあります。

于 2011-01-05T18:55:29.233 に答える