Как использовать асинхронный NSURLConnection для нескольких URL
Во-первых, я думаю, что у iPad есть только один сетевой адаптер (или какое-либо другое оборудование) для обработки соединения. Таким образом, запросы ставятся в очередь и обслуживаются последовательно, и одновременно не может быть запущено 2 соединения. Это предположение верно?
я имею UITabBar
контроллер, где контроллер представления каждой вкладки загружает и анализирует различные URL-адреса фида JSON. Я создал одноэлементный класс, который загружает фиды с одного URL, затем анализирует его и вызывает функцию делегата одного из контроллеров представления, когда работа завершена. Я решил использовать асинхронное соединение, чтобы не вешать основной поток.
URLConnection4Target * _conn = [[URLConnection4Target alloc] initWithRequest:request delegate:self startImmediately:NO];
Таким образом, все вкладки доступны из одного и того же окна (не перемещаются одна за другой), и они используют разные URL для разных каналов.
Моя проблема заключается в том, как спроектировать соединение в одноэлементном классе, чтобы обслуживать несколько контроллеров представления последовательно (или одновременно, если это возможно).
Я пытался использовать NSInvocationOperation
потому что я не был уверен, что произойдет, если пользователь нажал одну вкладку и получил доступ к NSURLConnection
объект, в то время как это уже доступно другому контроллеру представления.
1 ответ
Во-первых, количество сетевых подключений не привязано к количеству сетевых карт (NIC), портов Ethernet и т. Д. Во-вторых, вы упоминаете, что используете одноэлементный шаблон для вашего URLConnection? Не видя ваш синглтон, я полагаю, что это причина, по которой вы, похоже, можете открыть только одно соединение за раз. Вы можете создать столько URLConnections, сколько вам нужно для ваших вкладок, не ограничивайте их одиночными. Подумайте об URLConnection/request, N x request /tab и у вас все будет хорошо.
Поэтому, когда вкладка видима / активна, создайте URLRequest для содержимого, пусть она работает асинхронно в bg, но убедитесь, что все обновления пользовательского интерфейса отправляются обратно в основной поток. Наконец, когда запрос завершен, освободите его и забудьте об этом.