Я хочу загрузить некоторые изображения в мое приложение из файловой системы. Есть 2 простых способа сделать это:
[UIImage imageNamed:fullFileName]
или:
NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];
[UIImage imageWithData:imageData];
Я предпочитаю первый, потому что он намного меньше кода, но я видел, как некоторые люди говорили, что изображение кэшируется и что этот метод использует больше памяти? Поскольку я не доверяю людям на большинстве других форумов, я подумал, что задам вопрос здесь, есть ли практическая разница, и если да, то какой из них «лучше»?
Я попытался профилировать свое приложение. используя инструмент «Распределение объектов», и я не вижу никакой практической разницы, хотя я пробовал только в симуляторе, а не на самом iPhone.
Это зависит от того, что Вы делаете с изображением. imageNamed:
метод действительно кэширует изображение, но во многих случаях это собирается помочь с использованием памяти. Например, при загрузке изображения 10 раз для отображения наряду с некоторым текстом в табличном представлении, UIImage только сохранит единственное представление того изображения в памяти вместо того, чтобы выделить 10 отдельных объектов. С другой стороны, если у Вас есть очень большое изображение, и Вы не снова используете его, Вы могли бы хотеть загрузить изображение из объекта данных удостовериться, что оно удалено из памяти, когда Вы сделаны.
, Если бы у Вас нет огромных изображений, я не волновался бы об этом. Если Вы не видите проблемы (и престижность за проверку Объектного Выделения вместо того, чтобы заблаговременно оптимизировать), я предпочел бы меньше строк кода незначительным улучшениям памяти.
По моему опыту [UIImage imageNamed:]
имеет существенно лучшую производительность, особенно при использовании в UITableViews
.
Это не просто память, но также и декодирование image
. Кэширование его намного быстрее.
Мне также сказали, что [UIImage imageNamed:]
делает немного слишком много кэширования, и изображения не часто выпускаются. Мне сказали остерегаться использования его.
imageNamed
, он кэширует изображения, хорошо, тогда, что я должен сделать для выпуска того кэшируемого изображения из памяти? Будет это автовыпустило? Спасибо – Almas Adilbek 28.03.2020, 06:24