Приложение iOS для просмотра на основе данных

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

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

Спасибо!


person user635064    schedule 04.03.2011    source источник


Ответы (2)


Подумайте о требованиях. Наиболее актуальные вопросы, ИМО, следующие:

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

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

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

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

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

person MHC    schedule 04.03.2011

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

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

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