iPhone-SDK: вызвать функцию в фоновом режиме?

Можно ли вызывать мою функцию в фоновом режиме после определенного интервала программно в разработке iPhone SDK? Я хочу вызывать одну конкретную функцию в фоновом режиме в течение определенных промежутков времени (может быть каждые 10 минут) во время запуска моего приложения..

Не могли бы вы поделиться своими идеями.

Благодарю.

Клав /

3 ответа

Самый простой способ - это запланировать NSTimer на основных потоках запускай цикл. Я полагаю, что следующий код реализован в вашем делегате приложения, и что вы вызываете setupTimer от applicationDidFinishLaunching:,

-(void)setupTimer;
{
  NSTimer* timer = [NSTimer timerWithTimeInterval:10 * 60
                                           target:self
                                         selector:@selector(triggerTimer:)
                                         userInfo:nil
                                          repeats:YES];
  [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}

-(void)triggerTimer:(NSTimer*)timer;
{
  // Do your stuff
}

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

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

Или вы могли бы запустить NSTimer в фоновом потоке с чем-то вроде этого (я намеренно пропускаю объект потока):

-(void)startTimerThread;
{
  NSThread* thread = [[NSThread alloc] initWithTarget:self
                                             selector:@selector(setupTimerThread)
                                           withObject:nil];
  [thread start];
}

-(void)setupTimerThread;
{
  NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
  NSTimer* timer = [NSTimer timerWithTimeInterval:10 * 60
                                           target:self
                                         selector:@selector(triggerTimer:)
                                         userInfo:nil
                                          repeats:YES];
  NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
  [runLoop addTimer:timer forModes:NSRunLoopCommonModes];
  [runLoop run];
  [pool release];
}

-(void)triggerTimer:(NSTimer*)timer;
{
  // Do your stuff
}

У вас может быть таймер, посмотрите на NSTimer, чтобы он срабатывал каждые 10 минут, чтобы это происходило в фоновом режиме, и у вас есть несколько опций, которые назовите два. Прежде всего, обратите внимание, что любая работа с пользовательским интерфейсом не должна выполняться в другом потоке, поскольку UIKit не является потокобезопасным.

NSThread ссылка здесь http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/Reference/Reference.html

Ссылка NSTimer здесь http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/Reference/NSTimer.html

Чтобы вызвать функцию в главном потоке, используйте NSTimer.

Чтобы вызвать его в другом потоке, создайте NSOperation и настройте NSOperationQueue для его вызова.

Другие вопросы по тегам