Какой метод dealloc вызывается первым?
Допустим, у меня есть 2 класса, классы A и B. По составу класс A имеет экземпляр класса B. Другими словами, класс A - это тот, который создает экземпляр класса B.
Если я нахожусь в финальной версии моего объекта, который является своего рода классом A, будет ли сначала выполняться метод dealloc класса B? Это всегда так? Будет ли случай, когда сделка класса A будет выполнена до класса B?
Я пытаюсь понять порядок, в котором будет выполняться метод dealloc классов.
(Это в дуге)
2 ответа
Если вы удалите (или, в реальном выражении, удалите последнюю сильную ссылку) экземпляр класса A, он будет освобожден. В рамках ARC, как часть своего освобождения, он удалит свою сильную ссылку на экземпляр класса B, который затем будет освобожден, если ничто другое не имеет сильной ссылки на него.
Итак, метод dealloc A вызывается первым.
Если вы зависите от порядка операций для выполнения чего-либо, это довольно неприятный запах кода.
Когда последняя сильная ссылка на данный объект исчезает, его -dealloc
будет работать, и он удалит все свои сильные ссылки на свои переменные экземпляра. Если это были последние сильные ссылки на эти объекты, то процесс будет повторяться для них.
Другими словами, если A владеет B, то A будет освобожден до B.