1

私はまだARC内部で100%ではありません。

私が明確にしたいいくつかの例:

someObjectToReturn = [[SomeClass alloc] init];メソッド内に割り当てられて返されるのはどうなりますか?たとえばsomeObjectに割り当てられている場合someObjectToReturn、someObjectToReturnはいつリリースされますか?someObjectが無効になっている場合、またはsomeObjectToReturnを自動解放プールに追加する必要がある場合はどうなりますか?

もう1つのケースは、オブジェクトの配列がnilledの場合、すべてのオブジェクトが解放されますか?

最後に、コピーされたブロックオブジェクトを解放するのに適した場所はどこですか?または、実行後もブロックは解放されますか?コピーされたブロックが自動解放プールに追加された場合、いつそのプールを排出しますか?10個のブロックがあり、それぞれが自動解放プールに追加されているとしましょう。それをすぐに排出すると、実行中のブロックが停止します。ブロックのnillingをメインスレッドにディスパッチするなど、コピーされたブロックをそれ自体の内部からnillingできますか?

4

1 に答える 1

1

あなたは物事を複雑にしすぎているようです。ARC の下では、オブジェクトを解放したり、自動解放プールを空にしたりすることはできないため、これを行う「適切な」タイミングはありません。オブジェクトの所有権について考えてください。

具体的な質問:

  1. 戻り値が代入される変数がスコープ外になるか、nil に設定されると、オブジェクトは解放されます。心配する必要はありません。

  2. はい、配列が nil に設定されると、配列のすべての内容が解放されます。心配する必要はありません。

  3. 完了したら、コピーされたブロックを保持する値を nil に設定できます。または、コピーされたブロックを所有するオブジェクトがなくなると、値は消えます。ARCの下で自動解放プールを排出することはできません。ステートメントを@autoreleasepool{}ブロックにラップすることはできますが、これはブロック内のすべてをキャプチャするだけです。プールに何かを「追加」したり、プールを「排出」したりしません。

于 2013-02-02T12:49:10.373 に答える