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 里面那么是不会运行的
网友评论