7-3 NSTimer 与RunLoop

NSTimer需要添加进Runloop中才可以执行 同样的

    self.timer = [NSTimer timerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
        NSLog(@"----- ----- ");
    }];
////> 不添加只执行一次。因为 timer需要添加到 RunLoop 中才可以执行 下面的创建方式会默认添加到 :NSDefaultRunLoopMode中  所以下面的创建方式会执行多次 这种方式只执行一次
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
    [self.timer fire];
    
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(update) userInfo:nil repeats:YES];
    [timer fire];

累计添加结果
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];
===
 [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

[self performSelector: withObject: afterDelay:0];

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        // 当前在子线程中,有afterDelay参数的方法不会被执行
        [self performSelector:@selector(delay) withObject:nil afterDelay:0.3];
        // 此方法会被执行
        [self performSelector:@selector(noDelay) withObject:nil];
    });

afterDelay:0.3 会开启一个NSTimer 如果不在NSRunLoop 里面那么是不会运行的

你可能感兴趣的:(7-3 NSTimer 与RunLoop)