Форум программистов, компьютерный форум CyberForum.ru

Кеширование картинок - Программирование iOS/iPhone

Восстановить пароль Регистрация
 
Slava-hacker32
7 / 7 / 0
Регистрация: 16.11.2011
Сообщений: 242
07.11.2014, 15:39     Кеширование картинок #1
Доброго времени суток. Подскажите как правильно организовать хранение и отображение картинок. В json пакете получаю адреса картинок с этим проблем нет. Но как правильно организовать оффлайн версию приложения? Что бы я мог отображать эти картинки без доступа в интернет?
Как вариант можно скачать все картинки по указанным адресам и хранить их где то в каталоге приложения, но насколько эта идея хороша? Ведь картинок может быть много, а это заставит пользователя ждать пока скачаются все картинки (в tableview будет только текст без картинок которые еще только грузятся), плюс размер приложения увеличится или может это нормальная практика, но может подскажите как ее лучще реализовать например скачивание в отдельный поток засунуть? Может есть готовые фреймворки?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vorona
Peace 2 all shining faces
 Аватар для Vorona
661 / 523 / 44
Регистрация: 05.03.2010
Сообщений: 1,268
08.11.2014, 15:22     Кеширование картинок #2
да это на самом деле тривиальная задача, в интернете куча способов загрузки картинок в таблицу на фоне
сначала отображаете легковесные данные, потом догружаете тяжеловесные

оффлайн версия - тоже просто, у вас есть локальная база данных, в ней храните пути к картинкам либо просто имена файлов, а когда будете отображать их оффлайн, просто по имени собираете путь и получаете картинку из локальной файловой системы, куда вы их сохранили

то, что размер приложения увеличивается, это тоже нормально
вы, конечно, можете чистить кеш (данные из базы и картинки), когда пройдет определенное время или перейдете на другой скрин, или закроете приложение и тд
vitali36
7 / 7 / 2
Регистрация: 09.02.2014
Сообщений: 91
12.11.2014, 14:42     Кеширование картинок #3
Пользователь не будет ждать если они будут качаться в другом потоке, чтобы не тормозил UI. Как я делал для отображения в каждой ячейке аватарки пользователя:
Objective-C
1
2
3
4
5
6
7
8
NSURLRequest* request = [NSURLRequest request WithURL:"url картинки"];
__weak UITableViewCell* weakCell = cell;
cell.imageView.image = nil;
[cell.imageView setImageWithURLRequest:request placeholderImage:nil  success^(параметры блока){
weakCell.imageView.Image = image;
[weakCell layoutSubviews];
}
failure:^(параметры блока)
. Ты предусмотри еще то, что у тебя не сразу все картинки качаются. Скачалось, скажем, 8. потом проскроллил - еще 8. B и т.д. И никаких тормозов - приложение летает. Ну а если в оффлайне тебе надо будет отображать, то тогда в кордате храни данные
Slava-hacker32
7 / 7 / 0
Регистрация: 16.11.2011
Сообщений: 242
12.11.2014, 22:14  [ТС]     Кеширование картинок #4
не, я понимаю что в отдельном потоке будут качаться картинки, меня интересует вопрос, показывать что то на месте предполагаемой картинки, какую то дефолтную картинку или ничего не показывать, пусть будет пустая область?
vitali36
7 / 7 / 2
Регистрация: 09.02.2014
Сообщений: 91
12.11.2014, 23:04     Кеширование картинок #5
Это как ты хочешь. Посмотри выше где я писал. Там placeholderImage нил я ставил. А можешь поставить что тебе нужно)
Vorona
Peace 2 all shining faces
 Аватар для Vorona
661 / 523 / 44
Регистрация: 05.03.2010
Сообщений: 1,268
12.11.2014, 23:47     Кеширование картинок #6
если на экране немного картинок, то можно активити индикатор ставить, пусть крутится пока картинка не загрузится
а если в таблице много ячеек, то будет немного раздражать куча колесиков, потому лучше что-то дефолтное поставить
Slava-hacker32
7 / 7 / 0
Регистрация: 16.11.2011
Сообщений: 242
17.11.2014, 12:22  [ТС]     Кеширование картинок #7
а картинки лучше хранить в файловой системе или в CoreData? Как это скажется на скорости работы приложения или скорость загрузки картинок (или других файлов) из coreData и файловой системы примерно одинаковый?
vitali36
7 / 7 / 2
Регистрация: 09.02.2014
Сообщений: 91
17.11.2014, 13:46     Кеширование картинок #8
я бы хранил в coreData пути на картинки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2014, 13:51     Кеширование картинок
Еще ссылки по теме:

Objective-C Загрузка картинок в ячейках TableView
Как сделать асинхронную загрузку картинок в UITableView не останавливая главный поток? Objective-C
Отображение картинок во втором vc
Скролинг картинок
перелистывание картинок (при неограниченном кол-ве картинок), используя пикчербоксы на C# C#

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
17.11.2014, 13:51     Кеширование картинок #9
vitali36, главное не абсолютные...
Yandex
Объявления
17.11.2014, 13:51     Кеширование картинок
Ответ Создать тему
Опции темы

Текущее время: 08:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru