Как создать многообслуживающий класс ASIHTTPRequest, освобожденный после завершения запроса? - PullRequest
0 голосов
/ 16 июня 2011

Я отображаю UIImage в представлении. Иногда запрашиваемое изображение отсутствует в основном комплекте или в пользовательских папках. Если это так, я хочу:

  1. начать загрузку изображения с удаленного сервера
  2. установить UIActivityIndicator для целевого UIImageView
  3. после полной загрузки сохраните загруженный образ в папку
  4. загрузить UIImage в UIImageView и остановить UIActivityIndicator

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

Я создал DownloadManager со статическим методом + getImage: (NSString *) URL targetUIImageView: (UIImageView *) targetUIV Я хочу, чтобы этот метод создавал новый ImageDLClass с каждым собственным ASIHTTPRequest, его собственным целевым (назначаемым) UImageView. Проверка, если эта цель == ноль позволяет узнать, освобожден ли вид или нет.

Я не могу понять, кто будет хранить все экземпляры ImageDLClass и как я могу их освободить после завершения загрузки.

Я ищу идеи архитектуры, я уже знаю, как кодировать каждую точку. У вас есть архитектурные идеи?

Спасибо за вашу помощь!

kheraud

1 Ответ

0 голосов
/ 23 июня 2011

Я наконец-то пользуюсь лучшей вещью.

Ключевое слово magick здесь - userInfo. Фактически вы можете связать что-либо с запросом и получить это «что-нибудь» в методах делегата.

Моя архитектура следующая:

  • Синглтон ImageManager
  • ImageManager имеет один атрибут: массив, содержащий запрос, еще не завершенный
  • В ImageManager есть метод, который запускает запрос ASIHTTPRequest и добавляет этот запрос в свой массив
  • В userInfo каждого запроса есть указатель на целевой UIImageView
  • UIActivityIndicatorView создается (с номером тега 555) и добавляется как подпредставление к целевому UIImageView после запуска асинхронного запроса
  • UIActivityIndicatorView удаляется с помощью номера тега

Атрибут массива позволяет отменять и освобождать все незавершенные запросы, если ImageManager освобожден.

Надеюсь, это поможет!

kheraud

...