0

私はobjective-cを学んでおり、明確にしたいと思います.autoreleasepoolを使用するとき、テストオブジェクトを使用した後にautoreleaseメッセージを送信する必要がありますか?

for (int i = 0; i < 10; ++i)
{
    @autoreleasepool {
        TestClass* tc1 = [[TestClass alloc] init];
        //....... do some stuff with tc1
        [tc1 autorelease];
    }
}
4

1 に答える 1

1

autoreleasepool を使用する場合、テスト オブジェクトの使用後に autorelease メッセージを送信する必要があります

それらには何の相関関係もありません。

何をすべきかは、何をしたいか、および自動参照カウントを使用しているかどうかによって異なります。

ARCを使用している場合(autoreleaseメッセージを送信するため、そうではないと思います)、単純なケースではオブジェクトの解放についてまったく心配する必要はありません。(より複雑なモデルで高度なメモリ管理を使用する必要がある場合、ARC は MRC よりもさらに複雑になりますが、とにかく...)

ARC を使用していない場合は、2 つのオプションがあります。autorelease最も内側のスコープの自動解放プールの最後でオブジェクトを解放できるようにします。あなたが提供した例では、これを行っても問題ありません。

ただし、自動解放は主に、メソッド/関数からオブジェクトを返すときに所有権を破棄することを目的としています。一般にrelease、割り当てられて初期化されたオブジェクトが不要になったときに、そのオブジェクトに明示的にメッセージを送信します。

于 2012-12-08T08:20:43.480 に答える