1

クラス A とクラス B の 2 つのクラスがあるとします。構成により、クラス A にはクラス B のインスタンスがあります。つまり、クラス A はクラス B のインスタンスを作成するクラスです。

クラス A の一種である私のオブジェクトの最終リリースにいる場合、クラス B の dealloc メソッドが最初に実行されますか? これは常に当てはまりますか?クラス A の割り当て解除がクラス B の前に実行される場合はありますか?

クラスの dealloc メソッドが実行される順序を理解しようとしています。

(これはARCにあります)

4

2 に答える 2

2

クラス A のインスタンスを削除 (または、実際には最後の強い参照を削除) すると、割り当てが解除されます。ARC の下では、割り当て解除の一部として、クラス B のインスタンスへの強い参照が削除されます。クラス B への強い参照が他にない場合は、割り当てが解除されます。

したがって、A の dealloc メソッドが最初に呼び出されます。

何かを行うためにこの操作の順序に依存している場合、それはかなり悪いコード臭です。

于 2014-01-16T08:09:15.753 に答える
1

特定のオブジェクトへの最後の強い参照がなくなると、そのオブジェクトが-dealloc実行され、そのインスタンス変数へのすべての強い参照が削除されます。それらがそれらのオブジェクトへの最後の強力な参照である場合、プロセスはそれらに対して繰り返されます。

つまり、A が B を所有している場合、A は B の前に割り当て解除されます。

于 2014-01-16T08:05:28.703 に答える