Objective-C Coroutine - PullRequest
       4

Objective-C Coroutine

3 голосов
/ 27 августа 2010

Objective-C - как я могу создать сопрограмму Objective-C? Когда у меня вызывается IBAction с помощью кнопки, приложение останавливается до тех пор, пока IBAction не завершит получение данных (с веб-сайта). Как я могу выполнить это как сопрограмму для основного приложения?

Спасибо, Кристиан Стюарт

Ответы [ 2 ]

1 голос
/ 27 августа 2010

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

Для iOS и Mac OS X существует два основных метода: запуск циклов и потоков.

Если вы просто загружаете некоторые данные через URL-адрес HTTP, вы можете начать загрузку и сказать ей, чтобы она уведомляла вас, когда это будет сделано или когда у вас есть некоторые данные для вас. Загрузка URL-адреса будет управлять собственным параллелизмом с использованием текущего цикла выполнения, и ваше приложение сможет взаимодействовать с пользователем.

Если вам нужно выполнить собственную обработку, вы можете выделить фоновый поток, чтобы сделать это, используя NSOperationQueue и NSOperatipn, используя GCD (dispatch_ *) или непосредственно используя NSThread. Если вы делаете это, вам нужно понимать параллельное программирование, защиту общего состояния с помощью мьютексов (блокировок) и других механизмов синхронизации и т. Д.

Для загрузки только URL-адреса используйте собственную поддержку параллелизма NSURLDownload. Для более трудоемкой работы, попробуйте NSOperation.

0 голосов
/ 27 августа 2010

Посмотрите Руководство по программированию системы загрузки URL .

Возможно, вы заинтересованы в NSURLConnection , вы настраиваете URL и предоставляете делегатов. Вашим делегатам звонят с данными и когда соединение / загрузка завершена.

...