40

だから、私はクラスを持っています:

@interface Controller : NSObject
{
    UILabel* fileDescription;
}

@property(strong, nonatomic) UILabel* fileDescription;

プロパティfileDescriptionがnilに等しい場合、メソッドdeallocを使用する必要がありますか?
例えば:

-(void)dealloc
{
    fileDescription = nil;
}

そうでない場合、fileDescription によって使用されるメモリを誰が破棄するのでしょうか?

4

5 に答える 5

81

dealloc通常、ARC がインスタンス変数の有効期間を管理するため、サブクラス化されたメソッドを提供する必要はありません。

ただし、オブジェクトの解放以外のクリーンアップを実行すると便利な場合があります。たとえば、オブザーバーを削除したり、ネットワーク接続をきれいに閉じたりすることができます。したがって、ARC の下でサブクラス化することはできますが、サブクラス化されたメソッド内deallocから呼び出すことはできません[super dealloc]

ただし、特定のケースでは必須ではありません。

于 2013-01-24T12:18:33.620 に答える
9

いいえ。

deallocのメソッドは必要ありませんARC

ただし、ビューを閉じたり解放したりするときに、いくつかのクリーンアップ タスクを実行したい場合。最適な場所です。そのような場合に実装できます。

例えば:

ビューでタイマーを実行していて、ビューを更新しています。ビューを閉じたら、そのタイマーを停止する必要があります。その状態で、dealloc メソッドを使用してそこでタイマーを停止できます。

NSNotificationオブザーバーについても同様です。

于 2013-01-24T12:17:21.383 に答える
6

ARC を使用している場合。

dealloc と release を使用する必要はありません。コンパイラは、プロパティとオブジェクトが強い/弱いことを認識しているため、それを管理します。

編集:

deallocCG...&などのコアフレームワーク オブジェクトを使用する場合は、メソッドが必要ですCF...。通知用のオブザーバーを作成しても、それを削除する必要がありdealloc、removeObserver に最適な場所です。

于 2013-01-24T12:16:10.143 に答える
0

Ans は NO です。なぜなら、ARC では割り当てを解除する必要がないからです。

于 2013-01-24T12:16:07.363 に答える
0

ARC を使用しているため、使用する必要はありませんdealloc Complier は、プロパティ、変数、またはコントロールのスコープに応じて autoreleasePool を設定します。そして、それはrelease記憶になります。通常、関数レベル、クラスレベルなどとして定義できるさまざまなタイプの autoreleasepool があります。これが役立つことを願っています。

于 2013-01-24T12:17:09.647 に答える