Как запустить две задачи независимо друг от друга - PullRequest
2 голосов
/ 24 мая 2011

Я создаю одно приложение на Mac OS X (10.6).В этом приложении у меня есть один экран, где пользователь будет вводить данные, и они будут сохранены в виде списка в локальной папке.Этот файл plist должен быть передан на сервер с помощью службы HTTP POST.Необходимо проверить подключение к серверу, а в случае сбоя подключения файлы будут сохранены в локальной папке.Через определенное время снова будет проверяться соединение с сервером и, если он найден, затем отправлять все файлы, хранящиеся в локальной папке, один за другим.

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

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

Спасибо, Барун

1 Ответ

3 голосов
/ 24 мая 2011

Существует несколько подходов к многопоточности в Objective-C! Самая простая стратегия - NSOperationQueue. Переопределите NSOperation для обработки вашего HTTP-запроса, при необходимости установите блок завершения, если вам нужно получать уведомление, когда он будет сделан, добавьте его экземпляр в объект NSOperationQueue, и все готово. Настройте NSTimer, чтобы перепланировать загрузку, если она не удалась в первый раз. Вы можете использовать NSURLConnection для обработки веб-контента. Обратите внимание, что NSURLConnection может устанавливать соединения асинхронно или блокировать. Поскольку ваш подкласс NSOperation уже работает в отдельном потоке, вы, вероятно, захотите использовать метод блокировки (если вам не нужно создавать параллельный подкласс NSOperation, что требует гораздо больших усилий).

Вы также можете использовать API Grand Central Dispatch, отсоединить новый поток от указанных вами методов или использовать обычный старый c (я бы не рекомендовал последние два, но было бы хорошо упомянуть их). В качестве бонуса NSOperationQueue и Grand Central Dispatch знают «что правильно», если у вас одновременно запущено несколько операций, и масштабируют количество потоков, чтобы соответствовать количеству ядер на компьютере пользователя, чтобы получить наилучшую производительность.

Проверьте документы для NSOperationQueue, NSOperation и NSURLConnection. Руководства и примеры проектов будут иметь весь исходный код, необходимый для начала работы в правильном направлении.

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