Добавление NSOperation к NSOperationQueue, которое запускает асинхронный запрос ASIHTTPRequest - PullRequest
2 голосов
/ 12 августа 2010

Поэтому я пытаюсь выполнить все мои вызовы REST, которые загружают данные в фоновом потоке, чтобы пользовательский интерфейс оставался отзывчивым.

У меня есть viewcontroller, который содержит NSOperationQueue.Я создаю экземпляр моего класса импортера, который является подклассом NSOperation.Внутри метода main () моего импортера я настраиваю ASIHTTPDataRequest.Я создаю запрос, затем пришло время запустить его.

Проблема: я столкнулся с проблемой при запуске запроса, вызвав startAsynchronous для запроса.Обратные вызовы делегатов никогда не вызывают.Это как запрос запускается, загружает свои данные, но никогда не вызывает методы обратного вызова делегата.

Мое решение: Кажется, что все работает нормально (т.е. обратные вызовы и т. Д.), Когда я запускаю запрос синхронно.Это правильное решение?

Почему синхронный вызов работает, а не асинхронный?Я моделирую свой класс импортера после образца яблок "TopSongs".

Ответы [ 2 ]

6 голосов
/ 12 августа 2010

Сам ASIHTTPRequest не должен блокировать пользовательский интерфейс, если вы запускаете его из основного потока.

  • ASIHTTPRequest не предназначен для запуска из фонового потока. [ASIHTTPRequest requestFinished] вызывает «готовый» обратный вызов в главном потоке;он никогда не будет получен фоновым потоком, поэтому цикл выполнения фонового потока никогда не запускается.
  • ASIHTTPRequest в любом случае является операцией NSOperation .Это подробности реализации.
  • ASIHTTPRequest по умолчанию запускает свой сетевой код в фоновом потоке, поэтому вряд ли вы ощутите большую выгоду, вставив его в другой поток.это анализ данных, который занимает много времени, вставьте это в операцию.
1 голос
/ 12 августа 2010

Когда метод main() завершается, NSOperation переходит в конец и освобождается, поэтому вы получаете новые ответные вызовы делегатов, поскольку делегат освобожден.

...