Разбор JSON и изменение моей модели без блокировки интерфейса - PullRequest
0 голосов
/ 09 марта 2012

Я пишу приложение, которое выполняет множество запросов http и затем анализирует их ответ JSON.

Я хочу выполнить асинхронный анализ JSON, чтобы избежать блокировки пользовательского интерфейса.После анализа модель следует изменить в соответствии с полученным JSON.Мои контроллеры ViewController-ы наблюдают за ключами-значениями в моих классах моделей, чтобы мгновенно обновляться.

Мой вопрос таков: безопасно ли анализировать JSON и изменять мою модель в фоновом потоке?Когда модель изменится, обновления пользовательского интерфейса будут запущены.Я бы очень хотел избежать использования замков, потому что это будет слишком сложно для меня.Мое решение безопасно?Любые идеи о том, как анализировать асинхронно и безопасно изменить модель без использования потоков вообще?

Ответы [ 3 ]

1 голос
/ 09 марта 2012

Эта ссылка Работа с json в ios 5 наверняка поможет вам

1 голос
/ 09 марта 2012

Вам не нужно писать свои собственные блокировки. Просто используйте атомарные свойства в вашей модели, и вы в безопасности потоков.

Редактировать

Да, вот что делают свойства:
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW2

0 голосов
/ 16 августа 2012

Атомные свойства НЕ являются потокобезопасными! Objective-C: атомарные, свойства, потоки и / или пользовательский установщик / получатель А из документации :

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

Это НЕ означает, что они являются поточно-ориентированными.

Руководство по программированию параллелизма показывает, как реализовать различные виды блокировок.

Но чтобы ответить на ваш вопрос о том, безопасны ли они,проанализировать JSON и обновить вашу модель в фоновом режиме: да, это так.Но остальная часть вашего кода, который обращается к объектам модели, должна быть к этому подготовлена.Если вы обрабатываете уведомления о слиянии, с вами должно быть все в порядке, особенно если ваше приложение использует контроллеры извлеченных результатов.Если у вас есть пользовательский интерфейс, который не управляется извлеченными контроллерами результатов, пусть ваши контроллеры представления прослушивают соответствующие уведомления NSManagedObjectContext (т.е. NSManagedObjectContextObjectsDidChangeNotification) и действуют соответственно.Вы можете использовать это, чтобы увидеть, когда объект был вставлен, обновлен и т. Д., А затем обновите свой контроллер представления, повторно заполняя объект по его objectID.Поэтому, когда ваш json-анализ в фоновом режиме обновляет объекты модели, вы получаете уведомление о слиянии и слияние с контекстом объекта основного потока.Тогда ваши контроллеры вида увидят изменения в уведомлениях, которые они прослушивают, и заглянут в волшебный обновленный интерфейс.

...