Разработка асинхронной процедуры для загрузки и отображения изображений

#objective-c #ios #cocoa-touch #asynchronous #nsurlconnection

#objective-c #iOS #прикосновение какао #асинхронный #nsurlconnection

Вопрос:

У меня есть канал JSON, который содержит URL-адреса для изображений. Я использую NSURLConnection для загрузки файла JSON извлечение URL-адресов. Я хочу загружать все изображения асинхронно. Я выделил подкласс UIImage и отправил этому классу URL-адрес, который он загружает, по одному изображению за раз, асинхронным образом.

Во-первых, это хороший способ сделать это? Во-вторых, я хотел бы показать четыре изображения одновременно. Разве я не должен загружать каждый набор из четырех вместе, а не загружать один за другим?

Моя вторая проблема заключается в том, что у меня есть два NSURLConnection с. Это, вероятно, плохо. Должен ли я использовать то же NSURLConnection самое, чтобы загрузить JSON-канал и в то же время получить изображение?

Я пытаюсь отобразить четыре изображения одновременно, с помощью кнопки next, которая отображает следующие четыре в следующей строке.

Комментарии:

1. Я написал это сегодня на работе для загрузки и обновления объявлений. Жаль, что у меня нет перед глазами кода, который мог бы дать вам какие-либо указания.

2. Любые советы / предложения по дизайну? Мне действительно не нужен код — просто помощь в принятии проектных решений.

Ответ №1:

Я не уверен, что UIImage должен быть подклассом. Если вам нужна хорошая практика проектирования, вам следует взглянуть на пример кода TopPaid от Apple, поскольку он показывает, как правильно загружать канал, а затем асинхронно загружать изображения. Внимательно посмотрите на IconDownloader класс из этого проекта, который представляет собой класс, обрабатывающий загрузку изображений и уведомляющий своего делегата о завершении.

Насколько я знаю, нет проблем с одновременным подключением нескольких NSURLConnections. У вас могут возникнуть проблемы, если количество подключений станет очень большим, потому что это может привести к увеличению количества открытых файловых дескрипторов, разрешенных на iPhone, или, что более вероятно, создать предупреждение о памяти. В вашем случае, если у вас только 2 соединения, у вас нет никаких проблем.