7

標準の Objective-C 手動メモリ管理では、この質問で、初期化された NSArray を解放する方法が提案されました。

imageArray  = [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"1.png"], 
                        [UIImage imageNamed:@"2.png"],
                        nil];

使用することでした

[imageArray release];
imageArray = nil;

自動参照カウントで使用できなくなっ-releaseた場合、この NSArray を ARC でリリースするにはどのような方法が推奨されますか?

4

2 に答える 2

19

ARC を使用するには、メッセージとメッセージを削除するだけretainですrelease。したがって、次のように配列を削除します。

 imageArray = nil;

これは機能し、リークしません。なぜなら、ARC の下では、コンパイラーが必要な呼び出しを自動的に挿入するretainからreleaseです。

于 2011-08-26T18:15:59.757 に答える
12

imageArray がオブジェクトの ivar である場合 (おそらく安全な仮定ではありません)、アクセサーを使用して配列を nil に設定する必要があります。アクセサーは、配列とそのすべてのメンバーを解放します。

[self setImageArray:nil];

多くのメンバーを持つ配列を一掃する必要があるが、そのivarで有効な配列を準備しておいて、他のメソッドが安全にメッセージを送信できるようにする場合は、次を使用できます。

[self setImageArray:[[NSArray alloc] init]];

古い配列を新しい空の配列に置き換えます。

于 2011-08-26T16:57:25.127 に答える