Синхронная сеть, даже в фоновом потоке, не подходит.Вы не можете должным образом поддерживать отмену, и вы тратите впустую ресурсы, раскручивая фоновый поток, который большую часть своего времени простаивает.Хотя это в основном академическая проблема, если вы отправляете только один URL-запрос, это может быть другая история, если вы отправляете большое их количество.
Вам не нужно беспокоиться о получении connection:didReceiveData:
обратные вызовы вышли из строя.То, что вы написали, выглядит хорошо - вы можете просто объединить порции данных по мере их получения и сделать что-то с полными данными в connectionDidFinishLoading:
.
Что вам нужно беспокоиться, так это получение нескольких connection:didReceiveResponse:
обратных вызовов в случае перенаправления.См. документацию Apple .В этом случае вам просто нужно сбросить данные, которые вы накопили до сих пор, с помощью [xmlData setLength:0]
.
Наконец, если вам может потребоваться iOS5 или 10.7 и вам не требуется сложность делегата NSURLConnectionтогда новый метод +[sendAsynchronousRequest:queue:completionHandler:]
- это хорошая, не злая альтернатива +[sendSynchronousRequest:returningResponse:error]
.