7

つまり、自動リリースされたオブジェクトを作成していないと絶対に確信している場合は、もちろん作成しません。私の本当の懸念は、私が理解していない内部に何か他のものがあるかどうかです。関数を呼び出すバックグラウンドスレッドがあります。とにかく、常に自動解放プールを作成する必要がありますか?

- (void)someFuncOnABackgroundThread
{
    //don't seem to need this. no leaks found
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    //do something that doesn't create any objects, or only use alloc/init/release

    NSString* str = [[NSString alloc] init];
    [str release];
    [pool drain];
}
4

2 に答える 2

2

うん!必ず。内部で自動解放プールを使用している関数を呼び出している可能性があるため、自動解放を使用しているかどうかを実際に知ることはできません。

幸運を!

于 2011-02-21T04:08:20.010 に答える
1

最終的には、実装で使用しているインターフェースによって異なります。

例1

Foundationまたは他のobjcタイプと対話している場合は、そうする必要があります。疑いもなく。

投稿した例に固有の回答をするには:この場合は必ず作成してください-NSString apisは、自動解放プールが配置されていると想定する必要があります。

例2

libcでAPIを完全に扱っている場合は、必要ありません。

収益

  • 必要な場所(または必要でない場所)を理解するには、多くの時間がかかる場合があります。

  • 実装は変更される可能性があり、自動解放されたオブジェクトが導入される可能性があります。

  • 特にそのような単純な理由で、リークが発生しないことを保証する必要があります。

  • 克服するのは簡単な問題です。疑わしい場合は作成してください。

于 2011-02-21T04:50:48.970 に答える