Я думаю, что это проблема
addChild(viewColtroller) //1
viewColtroller.view.frame = cell.contentView.bounds
cell.contentView.addSubview(viewColtroller.view)
viewColtroller.didMove(toParent: self)
(1 *) self (UIViewController) сильно сохраняет «дочерний» ViewController
Когда вы подготавливаете ячейку для повторного использования, вы только удаляете представление «childViewController» из иерархии, но сам «childViewController» все еще сохраняется UIViewController (parent).
Когда вы удаляете новую ячейку из очереди, вы повторяете процесс, создавая нового дочернего элемента и добавляя его в родительский БЕЗ, удаляя предыдущий
viewController.removeFromParentViewController()
, поэтому дети не освобождены. Это увеличивает объем памяти с каждой очищенной ячейкой (фактически каждый новый childViewController добавляется к родительскому элементу).
Хороший способ подтвердить это - установить точку останова для метода deinit дочернего viewcontroller.
deinit {
// Breakpoint here
print("DEINIT")
}
ПРИМЕЧАНИЕ: печать здесь обязательна, пустой метод не перехватит точку останова.
Кроме того, для его отладки вы можете напечатать childViewControllers, прямо перед добавлением нового дочернего элемента
print(self.childViewControllers)
Итак, проблема в том, что cildViewControllers удерживается «родителем», а вы добавляете новые в каждую очередь.
Надеюсь, что это поможет, и извините за длину ответа.