Параллельный 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. |