В моем приложении есть RootViewController
, из которого все мои ViewControllers имеют подклассы.При разработке я обычно использую это в моем RootVC:
deinit {
print("\(type(of: self)) deinit")
}
, чтобы я всегда мог видеть, когда любой из моих viewControllers деиницируется.Он печатает:
MyExampleViewController deinit
Сегодня я заметил, что один из них не deinit, когда я отошел от него.Давайте назовем это DetailViewController
.Это совершенно нормальный (Root) подкласс ViewController, помещенный в основной NavigationController
.Когда вы нажимаете Back button
в навигации, он уходит, но никогда не говорит, что он определен.Это первый выдвинутый контроллер, поэтому я не могу открыть контроллер раньше, чтобы посмотреть, поможет ли это.Но любой контроллер нажимает после того, как DetailViewController
прекрасно обходится при навигации назад и вперед.
Я решил проверить график памяти, поэтому я снова запустил свое приложение, выдвинув на DetailViewController
, затем вытолкнул его, нажав Back button
в навигации, затем я нажал График отладочной памяти .
В отладочном навигаторе слева я прокручиваю вниз и вижу, что существует один экземпляр моего DetailViewController
.Если я несколько раз нажимаю взад-вперед, прежде чем открывать график памяти, я вижу столько раз, сколько раз я DetailViewController
нажимаю и нажимаю.
При нажатии на него я вижу следующее:
DetailViewController
- единственный контроллер в крайнем правом углу.Я не так много использовал Memory Graph , но я предполагаю, что «сплошные» белые линии - сильные утверждения, а чуть более прозрачные (серые) - слабые.Это означает, что есть одна сильная претензия к моему контролеру.Один внизу.
Это нижний ряд:
Что это значит?Кажется, у моего (пользовательского) NavigationController
есть массив с именем _childViewControllers
, в котором хранится мой выдвинутый контроллер.Для пояснения, у меня нет любых хранимых переменных в моем пользовательском NavigationController
.Это только подкласс для переопределения 5 функций, вот и все.У меня около 20 различных ViewControllers
, которые нажимаются и выталкиваются этим точно таким же пользовательским `NavigationController, но у них всех нет проблем с этим.
Я неправильно читаю график?Должно быть другое сильное утверждение, которое не видно на графике, верно?Когда я «выталкиваю» viewController
, нажимая Back
, не должен ли мой viewController
быть удален _childViewControllers
?