4

このトピックについて多くの質問があることを知っています。非 ARC ベースのプロジェクトに取り組んだことはありません。

私は次のように強いプロパティと弱いプロパティを持っています

@property(strong,nonatomic)NSArray *data1;
@property(unsafe_unretained, nonatomic)NSArray *data2;

私はいくつかの場所で、viewDidUnload で明示的にデータを nil にする人を見てきました。

すなわち

-(void)viewDidUnload{
    self.data1=nil;
    self.data2=nil;
}

私の質問は、私の場合にこれを行わないかどうかです(つまり、data1 と data2 を nil にしない場合)

viewDidUnload で)、ARC はオブジェクトを自動的に解放しますか?

4

2 に答える 2

3

はい、View Controller の割り当てが解除されると解放されます。viewDidUnload(iOS 6 以降は呼び出されなくなりました) は と同じではなくdealloc、の「反対」でもありませんviewDidLoad。ビューが画面外にあるとき、メモリ不足の状況でのみ呼び出されました。

一時的でメモリを大量に消費するオブジェクトは、nil に設定する必要があります。ARC はdidReceiveMemoryWarning自動的にそれを行いません

于 2012-09-26T05:57:31.603 に答える
2

はい、ARC は、親オブジェクトの破棄の直前に、すべての強参照プロパティ/変数を自動的に解放します。「弱い」参照に関しては、それらは保持/解放されません (これは ARC の有無にかかわらず同じです)。

通常、設定self.data1 = nilviewDidUnload必要ありませんが、参照されているオブジェクトが解放された場所を明確に示したい場合があります。このコード行でリリースされていることを確認したい場合data1は、持っているコードを使用してください。いつ、どこでリリースされるかを気にしないのであれば、その必要はありません。

于 2012-09-26T05:58:16.220 に答える