0

メインスレッドから変数を保持、使用、解放する2番目のスレッドに渡されるNSDictionaryがあります。

2 番目のスレッドがまだ変数を使用している間に、メイン スレッドの自動解放プールが空になった場合はどうなりますか? 2 番目のスレッドで変数を保持している場合でも、メイン スレッドのプールはまだ使用されていることを認識しますか?

ありがとう。

4

1 に答える 1

2

自動解放プールはかなりばかげています。変数が使用されていることを「認識」していません。release自動解放された各オブジェクトを呼び出すだけです。これは通常、イベント ループの各反復の最後に発生します。

2 番目のスレッドがそれを保持する前に自動解放プールが空になると、割り当てが解除されます。代わりに、スレッドを開始する前に、別のスレッドで使用されるものをすべて保持することをお勧めします。スレッドがいつ実行されるかを知る方法はないため、自動解放プールが空になるまで実行されないと想定することをお勧めします。

つまり、次のようにします。

NSDictionary *dictionary = // Get the autoreleased dictionary... somehow
[NSThread detachNewThreadSelector:@selector(myThread:) toTarget:self withObject:[dictionary retain]];

スレッドが所有し、スレッドが終了する前にそれdictionaryを呼び出す責任があるreleaseことに注意してください。そうしないと、アプリでメモリ リークが発生します。

于 2009-09-30T19:36:32.567 に答える