Вы не можете загрузить все фотографии из приложения - это кстати. невозможно из-за проблем с памятью при загрузке изображений.
Вы должны сначала подумать о том, чтобы сами представлять фотографии и фотографии.
- Нужно ли показывать фотографии в большом разрешении?
- Какое большое разрешение означает? Это разрешение 1024x1024 или родное или что?
- Откуда загружены эти фотографии? Приложение включает в себя или вы загрузите их из системной библиотеки? Я вижу, что вы пишете об объектах изображения, возможно, вы хотите сохранить их в приложении.
- Вам нужно показать это изображение в постоянной почти 0 раз? Может быть, сохранить его на бэкэнд, а выборка и кеш при необходимости будет лучше. При этом вы можете уменьшить размер приложения.
- Вы можете сохранить в активах только самую большую - @ 3x и изменить ее размер на устройствах, которым это нужно во время выполнения, перед их отображением.
Для сохранения фотографий в памяти устройства вы можете использовать NSCache
- Apple's Documentation и позволить системе управлять фотографиями. Вы загрузите это и выполните кеширование в экземпляре NSCache
, и каждый раз, когда вы хотите получить к нему доступ, и получите фотографию, вы должны проверить, есть ли фотография или нет, и если вам нужно повторно загрузить ее с диска. Это каким-то образом позволит вашему устройству не получать предупреждения о памяти и автоматически управлять фотографиями.
- Еще одна важная вещь, которую нужно думать, - это то, как вы планируете показывать фотографии. Можно ли показывать только по одному за раз или больше показать?Вы хотите представить эскизы из них, и после того, как пользователь выберет какую-нибудь фотографию, вы увидите ее в большом разрешении? Использование эскизов будет иметь меньший объем памяти.
Update 1:
UPD1: Приложение о достопримечательностях. Из табличного пользователя пользователь может выбрать любые места и будет показан экран с 1-3 фотографиями (в CollectionView, если есть более 1 фотографии) и некоторый текст. Все данные (кроме фотографий) Я получаю от sqlite db с помощью CoreData.
Приложение является автономным приложением, поэтому я хочу хранить фотографии в приложении. Теперь я просто об имиджевых активах. Но есть ли другие способы хранения фотографий?
Для этого вам не нужен каталог активов. Просто сохраните его в каком-то каталоге проекта и загрузите его из каталога/Documents, когда это необходимо. ИМО это будет наилучшим возможным подходом к хранению и использованию на местном уровне. Сохранение их в активах приведет к тому, что в файле xcassets будет @ 1x и @ 2x пустым. Думаю, сохранить их прямо в проекте будет проще.
Я хочу использовать фотографии большого разрешения, потому что хочу показать полноразмерные фотографии по крану. Каждая фотография может быть 2000px или более на самой большой стороне.
У меня есть идея сохранить их в высоком разрешении и изменять размер на любое устройство (3x, 2x, 1x) для отображения на экране. И загружайте высокое разрешение, когда пользователь нажимает на фотографию, чтобы показать фотографию на весь экран.
Сохранение таких больших фотографий в приложении плохая идея, приложение будет большим. Даже если одна фотография будет размером 1 Мб, что, я думаю, невозможно, и есть 400 фотографий, приложение будет толстым.
Вы должны подумать о том, чтобы держать их в сети, действительно.
Вы также знаете все изображения в приложении, чтобы создавать эскизы в реальном времени и кэшировать их в каталоге/Cache для последующего использования. То же самое с большими фотографиями для определенного разрешения экрана устройства. Перед отображением изменения размера и сохранения в каталоге/Cache для будущего использования в следующий раз.
Я обновил вопрос, потому что обновление было большим для комментариев. Я хочу знать, что лучше всего хранить в приложении так много фотографий и как эффективно их контролировать. Чем вы – DenFav
Обновлен мой ответ. –
«Просто сохраните его в каком-то каталоге проекта и загрузите его из каталога/Documents при необходимости». Я правильно понимаю вас? Чтобы сохранить фотографии, я должен сохранить их в '[[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]; '? – DenFav