Вызов NSURLConnection внутри dispatch async и чтение didReceiveResponse в mainRunLoop в разработке iPhone
То, что я пытаюсь сделать, это получить ответ для следующего метода
 - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { }
После вызова этого
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[conn scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[conn start];
В
dispatch_async();
Но метод connection не вызывает. Но когда я запускаю код NSURLConnection вне dispatch_async, он вызывает метод. 
delegate ссылается на self и self ссылается на фоновый поток, но не на сам класс UIViewController?1 ответ:
Поскольку вы создаете соединение, которое должно быть запланировано в цикле и запущено позже, убедитесь, что используется представление
initWithRequestс параметромstartImmediately, установленным вNO. Прямо сейчас, вы начинаете соединение дважды. И, что более важно, вы запускаете его до того, как запланировали его в главном цикле запуска.Чтобы исправить это, укажите
startImmediatelyкакNO:NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; [conn scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; [conn start];
Сказав это, я не вижу необходимости отправлять этот код в фоновую очередь вообще (потому что
initWithRequestработает асинхронно и не окажет заметного влияния на производительность приложения). Единственный раз, когда я использую вышеупомянутый шаблон, - это когда я упаковываю свои запросыNSURLConnectionв некоторый пользовательский подклассNSOperation(в этом случае приведенный выше шаблон очень полезен). Но в данном случае в этом нет необходимости.