Я использую SCNView в нескольких контроллерах представления в моем приложении, чтобы показать некоторый 3D-контент. Проблема в том, что когда я закрываю контроллер представления, содержащий SCNView, я получаю утечку памяти в соответствии с инструментом графика памяти XCodes. Сам SCNView не включен ни в один цикл сохранения, только объекты фреймворка из Foundation, CoreFoundation и т. д. и несколько объектов SCNKit, таких как C3DImage и C3DTexture.
Проблема может быть воссоздана в простом приложении следующим образом:
Создайте новый проект в XCode и выберите шаблон Game
Создайте новый контроллер вида и установите его в качестве экрана запуска
Добавьте кнопку UIB к новому контроллеру представления и соедините его с Segue, чтобы показать оригинальный контроллер представления, содержащий SCNView
Добавьте следующий код в GameViewController.swift в метод handleTap (_ жестRecognize: UIGestureRecognizer):
func handleTap(_ gestureRecognize: UIGestureRecognizer) {
// ---- Line added
self.dismiss(animated: true, completion: nil)
// ----
// retrieve the SCNView
let scnView = self.view as! SCNView
// check what nodes are tapped
Запустите приложение в симуляторе и несколько раз переключайтесь между представлениями, затем отображайте отладчик графика памяти и проверяйте на утечки.
Я не могу понять, что происходит, есть кто-нибудь, кто имеет ключ?
Спасибо за любую помощь.