1

私がARCを理解しているように、オブジェクトへの強い参照がなければ、収集するのは公正なゲームです(参照カウントが0であるため)。

クラス A のメソッドで、次のようにします。

ClassB* b = [[ClassB alloc] init];
[b doStuff];

doStuff では、次のようにします。

NSThread* t = [[NSThread alloc] initWithTarget:self selector:@selector(theThread) object:nil];
[t start];

クラス A のメソッドが終了した後にスコープ外になったため、 の参照カウントはb0 のように見えます。ただし、スレッドは現在 ClassB で「実行中」であり、ローカル リソースが必要になります。

ここでの動作は何ですか?あるいはb、スレッドがすべて終了するまで確実に残るようにするために、ここでの動作はどうあるべきでしょうか?

ありがとう!

4

1 に答える 1

4

ドキュメントにinitWithTarget:selector:object:は、スレッドがそのターゲットの所有権を取得する (強い参照を保持する) と記載されています。スレッド オブジェクトが破棄されると、ターゲットは解放されます。

ターゲットがNSThread.

于 2012-10-22T03:33:03.283 に答える