Я разрабатываю игру с THREE.js, которая будет работать внутри UIWebView внутри приложения на iOS8.UIWebView Коллекция мусора Javascript с изображениями THREE.js
Я профилировал это приложение в инструментах разработчика Chrome и обеспечил отсутствие утечек памяти - то есть - использование памяти достигает определенного значения и остается постоянным на всем протяжении.
Выполнение этого приложения в UIWebView, однако, показывает, что использование памяти растет с течением времени, как будто сбор мусора вообще не происходит.
Я искал в Интернете, но не могу окончательно определить, имеет ли iOS8 UIWebView сбор мусора или нет. Некоторые статьи, похоже, предлагают, что это так, а некоторые - нет. Если это так - как я могу это вызвать?
Единственное решение, которое я могу себе представить, в это время, если сбор мусора периодически периодически убивает/освобождает UIWebView и воссоздает/перезапускает приложение (игра на экране меню).
UPDATE:
Проведя несколько дней ищет утечки вот что я нашел:
Deallocating UIWebView не работает - система не освобождает все (даже со всеми предложенными хаков) и проблемы с памятью усугубляются.
Я до сих пор не знаю, есть ли у UIWebView марка/сборщик мусора - панель Profile/Instruments, кажется, предлагает, но это не так. Здравый смысл подсказывает мне, что некоторая сборка мусора должна иметь место, потому что все временные объекты в коде и вещи, выходящие из области действия, очищаются.
Мои three.js объекты, кажется, не всегда собирать - но это может быть связано с three.js собственные проблемы того, чтобы вручную распоряжаться ресурсами (для того, чтобы освободить любые GL связанные ручки и т.д.)
Существуют загадочные утечки, связанные с .bind (this) - пример setTimeout (object.func.bind (object), 100) - по-видимому, никогда не очистят функцию после отправки таймаута - так что я заканчиваю предварительную привязку и сохраняю ее как var вместо. То же самое касается любых четных обработчиков, переданных jQuery.
Моя 2 игра сцены (сцена меню и игровая сцена), я закончил переписывание таким образом, что обе сцены остаются в памяти (никогда не удаляются). Любые объекты и модели, которые я создаю в игре, вместо того, чтобы полагаться на GC, чтобы получить собранные данные, перерабатываются вместо этого. Когда объекты удаляются со сцены, они помещаются в пул объектов того же типа для повторной инициализации и повторного добавления, когда такой объект требуется в сцене снова. Сначала это казалось излишним, но преимущество - отсутствие утечек памяти (объекты остаются выделенными) и более быстрое создание/добавление к сцене.
Такая же проблема! Можете ли вы опубликовать образец своего кода? Надеюсь, кто-то может ответить на это. :) –