Приложение iOS с управлением данными - PullRequest
3 голосов
/ 04 марта 2011

Я новичок в Objective-C / Cocoa Programming.Я делаю приложение, которое должно постоянно синхронизироваться с сервером и обновлять его представление.Вкратце, вот что я подумал: инициируйте NSTimer для запуска каждую секунду или две, свяжитесь с сервером, если есть изменения, обновите представление.Это хороший способ сделать это?Я читал в другом месте, что вы можете иметь поток, работающий в фоновом режиме, который отслеживает изменения и обновляет представление.Я никогда раньше не работал с потоками, и я знаю, что они могут быть довольно хлопотными, и вам нужен большой опыт работы с управлением памятью, чтобы максимально использовать их.

У меня есть один месяц, чтобы сделать это приложение.Что вы, ребята, рекомендуете?Просто используйте NSTimer и сделайте это так, как я думал о ... или изучите многопоточность и сделайте это так (но помните мои временные рамки).

Спасибо!

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

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

В вашем случае сделайте это:

  1. Создайте таймер и вызывайте некоторый метод (скажем, update) каждые N секунд.
  2. in update отправляет асинхронный запрос на сервер и проверяет наличие изменений.
  3. загрузка данных с использованием делегата NSURLConnection и разбора. Примечание: если есть вероятность, что вы можете получить огромный объем данных с сервера, и его обработка может занять много времени (например, анализ 2 МБ данных XML), тогда вам нужно выполнить это в отдельном потоке.
  4. обновить все прослушиватели (например, соответствующие контроллеры представления) обработанными данными.
  5. продолжить опрос, используя таймер.
1 голос
/ 04 марта 2011

Подумайте о требованиях.Наиболее важные вопросы, IMO:

  1. требуется ли вашему приложению получать новые данные при работе в фоновом режиме?
  2. должно ли ваше приложение реагировать, то есть не вялокогда он получает новые данные?

Я думаю, что ответ на первый вопрос, вероятно, нет.Если вы обновляете представление в зависимости от данных, выборка данных требуется только тогда, когда представление является видимым.Вы не можете гарантировать постоянную загрузку данных в фоновом режиме, потому что iOS всегда может просто убить ваше приложение.В любом случае, с точки зрения вашего приложения, многопоточность не имеет отношения к этому вопросу.Поскольку вы обновляете только на переднем плане или также на заднем плане, вашему приложению требуется не более одного потока.

Многопоточность относится скорее ко второму вопросу.Если ваше приложение должно оставаться отзывчивым при извлечении данных, вам придется запускать извлекающий код в отдельном потоке.Более важно то, что обновление пользовательского интерфейса (например, представлений) должно происходить снова в главном потоке.

Обучение многопоточности в целом является чем-то действительно, но iOS SDK предоставляет большую помощь.Изучение того, как использовать очередь операций (я полагаю, это самое простое в изучении, но не обязательно самое простое в использовании), не займет много дней.Через месяц вы можете определенно завершить работу.

Опять же, однако, подумайте, зачем вам нужна многопоточность.

...