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 и использовать его для обработки в фоновом режиме.
Вы можете использовать метод NSObjects executeSelectorInBackground, который в основном создает поток и выполняет метод. Вот ссылка http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html:
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 для его вызова.