Что я обычно делал, так это создавал объект, который обрабатывает ленивую загрузку моих текстур через менеджер. При запуске я регистрирую свои известные текстуры и разрешаю их атрибуты файловой системы, которые понадобятся мне позже, чтобы сэкономить на простом вводе-выводе во время загрузки, а затем, когда они понадобятся, я их извлекаю.
Чтобы ускорить процесс, у меня также есть механизм пакетной загрузки, где я говорю: «Загрузите этот массив изображений и верните их мне». Это просто для устранения накладных расходов при повторных вызовах методов. Действительно, мое решение для одной загрузки - это просто обертка вокруг моей партии.
Таким образом, при запуске я кеширую свою бухгалтерию (создание объектов, обнаружение атрибутов файловой системы и т. Д.), Но откладываю тяжелую работу до необходимости. Когда я загружаю текстуры в свое приложение во время выполнения, это вызывает сбои, которые заполняют текстуры из хранилища в память текстур. Если я загружаю сцену с множеством известных ранее текстур, я загружаю набор очень распространенных текстур в режиме предварительной выборки, но откладываю относительно редко встречающиеся текстуры во время выполнения.
На практике это имеет тенденцию работать из-за возможных вероятностей - форсирование нагрузки во время запуска гарантирует, что вы столкнетесь со всеми текстурами одновременно, в то время как редкая загрузка их по вероятности приводит к снижению ожидаемой задержки пользователя, взвешенной по времени загрузки. латентность * вероятность загрузки в течение некоторого периода времени от начала. Если вы оптимизируете предварительную выборку времени запуска, чтобы не загружать текстуры, вы значительно уменьшите ожидаемые задержки интерфейса.
Кроме того, вы можете рассмотреть возможность использования NSURLConnection: connectionWithRequest: делегат: для загрузки ваших текстур из хранилища. Он асинхронный, поэтому вы можете попросить его загружать самые большие из них асинхронно и ваши меньшие синхронно, чтобы использовать преимущества коэффициентов простоя ввода-вывода / ЦП во время выборок файловой системы / декомпрессии текстур (большие файлы загружаются долго, в то время как небольшие файлы загружаются быстро и могут десериализоваться при в то же время). Вы должны проверить это, так как iPhone может плохо обрабатывать асинхронный доступ к файловой системе.