Вы должны рассмотреть безопасность потока, используя NSURLConnection?- iOS - PullRequest
0 голосов
/ 17 февраля 2012

Я только что некоторое время задавался вопросом, как именно асинхронные запросы работают с NSURLConnection.

Например, предположим, что в вашем приложении запущено несколько процессов выгрузки, и все они инициализированы с использованием разных экземпляров NSURLConnection. В процессе загрузки ваши объекты-обёртки получают методы делегата NSURLConnection, например:

-(void)connectionDidFinishLoading:(NSURLConnection*)connection;

Предположим, что во всех ваших объектах-оболочках NSURLConnection используется один и тот же объект делегата, который имеет список всех активных загрузок в массиве, и что при вызове connectionDidFinishLoading для всех ваших соединений они входят и удаляют себя из этого списка общий делегированный объект.

Тогда возникает вопрос: нужно ли беспокоиться о безопасности потоков, когда эти объекты подключения могут обращаться к одному и тому же массиву? Или все эти методы делегатов возвращаются в основной поток таким образом, что вам не следует беспокоиться о безопасности потока?

1 Ответ

2 голосов
/ 17 февраля 2012

Хитрость в том, что методы делегата вызываются в потоке, в котором вы создали NSURLConnection, который, если вы специально не измените его, будет основным потоком.ОС использует один из API очереди потоков для многократного вызова метода делегата в этом потоке в порядке завершения каждого соединения.

С NSURLConnection это действительно только передача, которая должна быть проделана.Если передача произошла в главном потоке, то во время передачи Пользователь не сможет взаимодействовать с вашим приложением iOS.Работа с результатом занимает относительно короткое время, но если это займет много времени, решите ли вы выполнять эту обработку в фоновом режиме (в другом потоке) или нет, тогда вам решать.

...