NSTimer с CFRunLoop - PullRequest
       4

NSTimer с CFRunLoop

2 голосов
/ 14 июля 2011

У меня странная проблема.Мой метод NSTimer CallMe не запускается без CFRunLoop.И если я добавлю CFRunLoop, то строка после CFRunLoop никогда не будет вызвана.Я хочу, чтобы обе строки после CFRunLoop и CallMe были запущены.

РЕДАКТИРОВАТЬ - мне плевать на CFRunLoop, просто хочу, чтобы таймер срабатывал каждые 20 секунд.

Я добавил код и комментарии ниже

int main(int argc, char * const argv[]) {
Updater *theUpdater = [[Updater alloc] init];
NSTimer *theTimer = [theUpdater getTimer];
[theTimer retain];
//CFRunLoopRun();
 NSLog(@"I am here"); //If I uncomment CFRUnLoop this line does not get executed
}

@ реализацияUpdater

- (NSTimer *)getTimer {
NSLog(@"Timer started");
NSTimer *theTimer;
theTimer = [NSTimer scheduledTimerWithTimeInterval:20.0
                                                target:self 
                                      selector:@selector(CallMe:) 
                                         userInfo:nil 
                                         repeats:YES];

return theTimer;

}

-(void) CallMe:(NSTimer*)theTimer{
NSLog(@"I Never get called");
}

@ end

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

Ваш таймер должен быть создан в контексте вашего CFRunLoop.Поэтому ваш код должен выглядеть примерно так:

NSRunLoop* myRunLoop = [NSRunLoop currentRunLoop];

Updater * theUpdater = [[Updater alloc] init];

[myRunLoop run]

У вас должен быть объект Updater , чтобы сохранить ваш таймер, поскольку он является его владельцем.Обратите внимание, что когда вы вызываете функцию run , она никогда не прекратит работу.Для других вариантов обратитесь к документации NSRunLoop .

1 голос
/ 14 июля 2011

Это ожидаемое поведение. Из CFRunLoop документов (выделение добавлено):

CFRunLoopRun

Запускает объект CFRunLoop текущего потока в его режиме по умолчанию до бесконечности .

Другими словами, CFRunLoopRun() никогда не вернется, если вы не позвоните куда-нибудь CFRunLoopStop().

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