2015-12-08 2 views
2

Скажем, я создаю NSTimer в каком-то месте в коде и потом, я хочу, чтобы добавить его в mainRunLoop только если он не был уже добавлен до:Проверяется NSTimer был добавлен в NSRunLoop

NSTimer* myTimer = [NSTimer timerWithTimeInterval:1.0f 
               target:self 
               selector:@selector(targetMethod:) 
               userInfo:nil 
               repeats:YES]; 

Еще одно место в коде:

if("my myTimer wasn't added to the mainRunLoop") 
{ 
    NSRunLoop *runLoop = [NSRunLoop mainRunLoop]; 
    [runLoop addTimer:myTimer forMode:NSDefaultRunLoopMode]; 
} 

есть ли способ проверить это?

ответ

3

Попробуйте это:

CFRunLoopRef loopRef = [[NSRunLoop mainRunLoop] getCFRunLoop]; 
BOOL timerAdded = CFRunLoopContainsTimer(loopRef, (CFRunLoopTimerRef)myTimer ,kCFRunLoopDefaultMode); 

затем проверить timerAdded переменная

2

Да; сохранить ссылку на него в переменной экземпляра и проверить не- nil:

@interface MyClass() { 
    NSTimer *_myTimer; 
} 
@end 

... 

if (!_myTimer) 
{ 
    _myTimer = [NSTimer timerWithTimeInterval:1.0f 
             target:self 
            selector:@selector(targetMethod:) 
            userInfo:nil 
             repeats:YES]; 
    NSRunLoop *runLoop = [NSRunLoop mainRunLoop]; 
    [runLoop addTimer:_myTimer forMode:NSDefaultRunLoopMode]; 
} 
+0

после создания таймера, _myTimer = ноль!. Это два места в коде, из которых позже я хочу добавить его в цикл выполнения. Но я хочу добавить его только один раз. – Sanich

+0

К тому же циклу запуска? – trojanfoe

+0

Да - К тому же циклу запуска. – Sanich