#ios #xcode #service #web
#iOS #xcode #Обслуживание #веб
Вопрос:
Разработка для iPad, iOS 4.3, objective-c, xcode 4.1.
Я создал класс-оболочку, который используется для вызова метода в веб-службе. Он отлично работает, когда я выполняю первый вызов, но не выполняется при последующих вызовах.
Метод в моем классе, «runMethod::», открывает NSURLConnection и выполняет вызов асинхронно, с самим классом-оболочкой в качестве делегата NSURLConnection.
Я где-то читал, что в Android есть ошибка, которая сохраняет пул подключений. При попытке установить соединение во второй раз происходит сбой, потому что предыдущее соединение оставалось открытым, несмотря на то, что код закрывал его. Следовательно, я подозреваю, что проблема в том, что соединение остается в пуле, и когда я пытаюсь создать другое, оно сталкивается? Может быть, у xcode аналогичная проблема?
И симптомами сбоя является кажущийся случайным «плохой доступ» к случайной строке в одном из селекторов делегатов, что предполагает, что это как-то связано с потоковой передачей — я понимаю, что HTTP-соединения работают в своем собственном потоке.
При необходимости я могу предоставить полный класс-оболочку, но у кого-нибудь есть идеи?
Комментарии:
1. Является ли ваша оболочка одноэлементным классом? Создаете ли вы NSURLConnection для каждого запроса? Возможно, какой-то код поможет, да 🙂
2. Извините, вчера я потратил целую вечность на копирование длинного класса-оболочки в статью, а затем все это потерялось, когда я опубликовал.
3. … и чтобы ответить на ваш другой вопрос, я не уверен, что такое одноэлементный класс. Да, я создаю NSURLConnection при каждом вызове и после асинхронного ответа закрываю его.
4. (Я продолжаю нажимать Return, чтобы начать новую строку, и проклятый комментарий публикуется непреднамеренно)… Создание NSURLConnection запускает асинхронный вызов, поэтому я каждый раз воссоздаю соединение. Возможно, мне следует создать переменную класса и проверить, был ли создан ее экземпляр? Если это так, я мог бы запустить какой-нибудь метод для отправки другого вызова?
5. Вы имели в виду iOS4.3 и Xcode4? Потому что я считаю, что вы все отменили.
Ответ №1:
Ошибка «плохой доступ» просто указывает на то, что вы разыменовываете недопустимый указатель. Чаще всего это происходит из-за неправильного управления памятью, например, из-за невозможности сохранить какой-либо объект. Код мог бы помочь, но сначала попробуйте команду Analyze в Xcode — статический анализатор довольно хорош в поиске проблем с памятью.