3

だから私が持っている場合:

SomeBlock myBlock = ^(){};
[self.mutableArray addObject: [myBlock copy] ];

後で必要な場合:

[self.mutableArray removeAllObjects];

次に、最初に配列内のすべてのブロックを調べて、それぞれを解放する必要がありますか?

ありがとう

編集:

私はARCを使用しておらず、配列にブロックを追加するときにコピーする必要があるのをどこかで見たので、[block copy]配列に追加するときにそうするので、配列からすべてのオブジェクトを削除する前にそれらを解放する必要があると思いました。

4

2 に答える 2

4

私はあなたがARCを使用していないと仮定しています(その場合、質問は面白くないでしょう)。

コードでは、すべてのブロックに送信する必要がありreleaseます::NSArray配置されたオブジェクトを保持し、配列自体が解放されたときにオブジェクトを解放しますが、メソッドが提供する1ため、追加したオブジェクトの保持カウントはすでにです。copy保持カウントが。のオブジェクト1。そのため、次のように、ブロックを配列に追加する前にフォローcopyする必要があります。autorelease

[self.mutableArray addObject: [[myBlock copy] autorelease]];
于 2013-02-28T03:04:41.580 に答える
0

オブジェクトの所有権を取得するたびに、それを解放するのはあなたの義務です。そうしないと、メモリ リークが発生します。

そのオブジェクトへのポインタを解放しないと、リークになります。配列を解放すると、保持しているすべてのオブジェクトに対して release が呼び出されます。

ARCの場合は自動解除になるので、自分で解除する必要があります。

于 2013-02-28T02:56:43.173 に答える