Технические вопросы и ответы QA1712

Параллельный NSOperations, Переставший работать На iOS 4

Q: У меня есть параллельный NSOperation, использующий NSURLConnection асинхронно. Почему это не работает над iOS 4?

A: У меня есть параллельный NSOperation, использующий NSURLConnection асинхронно. Почему это не работает над iOS 4?

В iOS 4 NSOperationQueue был обновлен для использования Grand Central Dispatch (GCD). Одно последствие этого изменения то, что -start к методу Вашего NSOperation теперь всегда обращаются вторичный поток. Если Ваш -start метод планирует выполненные обратные вызовы цикла на текущий цикл выполнения (например, это создает использование NSURLConnection +[NSURLConnection connectionWithRequest:delegate:]), вероятно, что никогда не будут вызывать те обратные вызовы.

Это не представляет изменение в семантике NSOperation. Всегда имело место что NSOperation's -start метод должен быть подготовлен работать на любом потоке. Однако на iOS 3 -start метод обычно вызывали на потоке, добавившем работу к очереди, подразумевавшей, что ошибки как это остались незамеченными.

Создание параллельного, выполненного цикла базировалось, NSOperation довольно хитер. Для конкретного примера того, как сделать это, необходимо смотреть на Пример кода 'LinkedImageFetcher'.



История версии документа


ДатаПримечания
23.08.2010

Новый документ, описывающий типичную проблему с параллельным, выполненным базируемым циклом, NSOperations (такой как те, которые используют NSURLConnection) на iOS 4.