Я бы порекомендовал вам создать существующую библиотеку синтаксического анализа JSON, в частности JSONKit
Джона Энгельхарта, учитывая, что это, возможно, самая высокая библиотека синтаксического анализа JSON среди iOS.Вообще избавляет вас от реализации пользовательского анализа JSON, но особенно спасает от реализации кода, который оказывается слишком медленным для ваших нужд, а затем вам нужно будет итеративно его улучшать, пока он не станет достаточно быстрым для использования.
Я знаю, что для HTTP-запросов вы уже реализовали такое поведение, но вам может потребоваться изучить ASIHTTPRequest
или AFNetworking
как сетевые библиотеки общего назначения, имеющие репутациюдовольно крепкийПримечание AFNetworking
использует вышеупомянутую библиотеку JSONKit
для анализа JSON.
Способ работы ASIHTTPRequest
(библиотека, которую я использую в своих проектах) заключается в использовании объекта делегата, реализующего протокол ASIHTTPRequestDelegate
, который вы назначаете после создания запроса с URL.Есть глобальная сетевая очередь, которая является просто NSOperationQueue
и обрабатывает асинхронные или несколько одновременных активных запросов.
Вы можете setDelegate:
, чтобы объект начал проверять, реализовал ли ваш делегат какой-либо из методов вразличные точки, такие как didReceiveData:
или requestDidFinish:
по умолчанию, но вы также можете установить собственный путь селектора для проверки, используя методы для отдельных операций (setDidFinishSelector:@selector(downloadComplete:)
).
Что вы можете сделать, когданапример, происходит обратный вызов didReceiveData:
, когда новые полученные данные передаются в буфер, сохраненный в классе-обертке для ASIJSONRequest
(или используйте AFNetworking
, который уже инкапсулирует это).Когда буфер таков, что в нем есть полный JSON-объект, который можно правильно проанализировать, вы вызываете JSONKit
, чтобы выполнить грубую работу, а затем, возможно, отправите еще один обратный вызов себе на ASIJSONRequestDelegate
для didReceiveData:
,но теперь данные представлены в формате, который может прочитать остальная часть вашего приложения.
Другой метод использования ASIHTTPRequest
- с блоками.Существует поддержка установки блока завершения для запроса, блока, который вызывается при получении данных и т. Д. Для этого шаблона разработки вам даже не нужен класс-обертка, просто установите блок кода для выполнения самого анализа ивернуть любые новые данные, проанализированные в желаемое место назначения.