Как реализовать NSThread, чтобы постоянно выполнять функцию в фоновом режиме в iPhone SDK - PullRequest
2 голосов
/ 04 февраля 2011

В моем приложении для iPhone я должен постоянно выполнять функцию в фоновом режиме.

Для этого, я думаю, мне придется использовать NSThread для вызова функции и продолжения ее выполнения в фоновом режиме.

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

Как мне реализовать NSThread для выполнения функции в фоновом режиме?

EDIT:

Функция предназначена для выборки данных с веб-сервера каждые 20 секунд и обновления таблиц в моем приложении для iPhone на основе данных, получаемых с веб-сервера.

Ответы [ 3 ]

4 голосов
/ 04 февраля 2011

Сначала я посмотрю на NSOperationQueue.

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

Вы также получаете преимущество с NSOperationQueue, заключающееся в том, что когда нет никаких операций для выполнения, процессор не просто застревает в цикле while (YES), ожидая,Это поможет пользовательскому интерфейсу вашего приложения быть более отзывчивым и продлить срок службы батареи:)

Однако, если ваша фоновая задача - это одиночная длительная задача, которую нужно просто запустить, а затем игнорировать, executeSelectorInBackground не так уж плохидея.

0 голосов
/ 07 февраля 2011

вы хотите взаимодействовать с циклом выполнения потока.если это NSThread, он создается автоматически.таким образом, вам предоставляется доступ к CF / NS-RunLoop - обычно путем вызова + [NSThread currentRunLoop] из вторичного потока.

в этом случае вы добавляете CF / NS-Timer в цикл выполнения и позволяетеэто запустить и повторять, пока ваша работа не закончена.когда срабатывает таймер, ваша нить просыпается, и вы затем делаете свою работу.

0 голосов
/ 04 февраля 2011

Звучит как плохая идея, но это очень просто.

[self performSelectorInBackground:@selector(theMethod:) withObject:nil];

Просто выделите время (ДА) в методе: и оно никогда не прекратится.

ПРАВКА:

К счастью для вас, просто сделать что-то один раз каждые 20 секунд.

[NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(theMethod:) userInfo:nil repeats:YES];

Это будет выполнять метод: один раз каждые 20 секунд.Могу также добавить, что это гораздо лучшая идея.

...