Доступ к XML-данным онлайн? - PullRequest
0 голосов
/ 24 марта 2010

Я просто тестирую приложение для получения данных с нашего веб-сервера, ранее я использовал:

NSURL, NSURLRequest, NSURLConnection и т. Д., Чтобы получить данные, которые я хотел.

Но я только что заметил, что если я переключусь на использование XML, я могу просто сделать следующее и передать результаты в NSXMLParser:

NSURL *url = [NSURL URLWithString:@"https://www.fuzzygoat.com/turbine?nbytes=1&fmt=xml"];

Правильно ли я думаю, что если вы просто после XML, это приемлемый метод? Похоже, что он очень короткий по сравнению с тем, что я делал раньше?

1011 * Гэри *

Ответы [ 3 ]

1 голос
/ 24 марта 2010

Это определенно верный путь. Существует много разных способов подключения (включая мой любимый ASIHTTPRequest ) и много-много разных XML-парсеров (включая мой любимый KissXML ), которые работают быстрее или эффективнее, чем Apple встроенные методы.

Но чтобы ответить на ваш вопрос, да, ваша логика и шаблон проектирования верны.

ОБНОВЛЕНИЕ: Поскольку Jasarien, кажется, думает, что вопрос говорит об асинхронных действиях, я буду обсуждать это здесь. ASIHTTPRequest обрабатывает асинхронные очень легко. Просто проверьте быстрые образцы .

1 голос
/ 24 марта 2010

Этот код создает только объект URL, который представляет URL.Он не делает никаких запросов и не загружает никаких данных.Вам по-прежнему нужно использовать NSURLRequest и NSURLConnection для фактической загрузки любых данных с сервера.

Кроме того, держитесь подальше от таких методов, как 'initWithContentsOfURL: `и friends, если вы не понимаете, что они заблокируютпоток, к которому они обращаются, пока не завершится.Для сетевых служб этот метод не следует использовать, поскольку он блокирует ваш пользовательский интерфейс на неопределенное время, поскольку вы не можете предсказать, насколько быстрым будет подключение к Интернету, где бы приложение ни использовалось.

NSURLConnection Асинхронная система запросов - это именно то, что вам нужно.Он не блокирует пользовательский интерфейс и предоставляет удобный инкапсулированный интерфейс для загрузки данных из удаленного местоположения.

0 голосов
/ 24 марта 2010

В зависимости от того, сколько XML вы получаете от веб-службы, NSXMLParser может быть не идеальным, поскольку весь документ XML должен быть прочитан в память.

Памяти на iPhone довольно мало, поэтому использование SAX-парсера, такого как в libxml2, вероятно, лучше для больших файлов XML. Вместо того, чтобы читать весь документ в память, XML-поток передается и анализируется на предмет определенных интересующих узлов. Объем служебной памяти меньше, поскольку одновременно сохраняется меньше данных.

Когда анализируется интересующий узел, вызывается обработчик события, чтобы сделать что-то полезное, например, сохранить где-нибудь данные узла.

В этом случае взгляните на пример проекта Apple XMLPerformance для примера кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...