web-dev-qa-db-ja.com

ARCでdeallocメソッドを使用する必要がありますか?

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

@interface Controller : NSObject
{
    UILabel* fileDescription;
}

@property(strong, nonatomic) UILabel* fileDescription;

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

-(void)dealloc
{
    fileDescription = nil;
}

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

39
Vit

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

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

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

81
trojanfoe

番号。

deallocARCメソッドは必要ありません。

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

例:

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

NSNotificationオブザーバーでも同様です。

8
Midhun MP

ARCを使用している場合。

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

編集:

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

6
Anoop Vaidya

AnsはNOです。ARCを使用すると、割り当てを解除する必要がないためです。

0
yen

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

0
Rushi