2015-08-20 3 views
2

Его хорошо документировано, что UIImage imageNamed кэширует изображения. И тенденция с новой версией iOS заключается в использовании файлов Asset Files для упрощения всех изображений @ 2x и @ 3x для всех устройств.Кэширование UIImage

Но чтобы избежать кэширования изображений и наилучшего использования памяти с изображениями, до сих пор я использовал бы методы, такие как imageWithData. Но эти методы не работают с файлами Asset, которые были до сих пор понятны. Потому что я не мог найти такие методы, как pathForResource, в комплекте, правильно работающем для изображений Asset. Является ли это недостатком для iOS или есть хороший обходной путь или это просто n00b ness от моего имени?

На одном из моих проектов, я заметил большое потребление памяти только потому, что какой-то образ, используемый на некотором начальном экране или так еще кэшируются любезно imageNamed:

Как можно обойти это то продолжать использовать простоту и удобство из активов набор изображений и все же избежать кэширования с помощью imageNamed:

Благодаря

ответ

1

Хотя UIImage'simageNamed кэширует изображения, и некоторые из старых форумах продолжают раздавать эту информацию. В более ранней версии ОС imageNamed имел memoryLeak, который уже давно исправлен.

Когда приложение получает предупреждение о сохранении памяти, кеш очищается. Поэтому вы можете продолжать использовать его.

+0

Спасибо за информацию, но моя забота - это тот этап, на котором приложение не получило предупреждение о памяти, но выделило много памяти, которая кэшируется ... что приводит к медленной производительности, как при виде таблицы, так и в анимационных эффектах , По сути, я упомянул, что хотел избежать кеширования как можно больше, но для таких объектов, как прокрутка или таблицы, с помощью imageNamed: но в то же время избегайте использования кэширования с помощью pathForResource все время, используя Asset Sets. Это возможно? Возможно, мой вопрос можно перефразировать как использование pathForResource для изображений в активах – 0x6d6e

+0

@ 0x6d6e 1. Имейте в виду, что если приложение заняло много памяти, все не будет вяло. Если на TableView или на анимации есть эффект производительности, это может указывать на интенсивность вычислений или на некоторые операции ввода-вывода, связанные с другими. И если память, которую вы занимаете, достигает критических уровней (где ОС может думать, что анимация может быть вялой), она отправит предупреждение о памяти, и если память сохранится/превысит ее, она убьет ее. 2. Тем не менее, я скоро обновлю свой ответ на бит pathForResource. –

+0

Благодарим вас за ваш ответ. В настоящее время мое приложение заканчивается предупреждением об очистке/Dialog на Xcode, в котором указано слишком много потребляемой памяти, а инструменты показывают, что UIIMage является основным виновником. – 0x6d6e