+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block
[NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
static NSInteger num = 0;
NSLog(@"%ld", (long)num);
num++;
if (num > 4) {
[timer invalidate];
NSLog(@"end");
}
}];
NSLog(@"start");
2016-12-29 16:29:53.901 定时器[11673:278678] start 2016-12-29 16:29:54.919 定时器[11673:278678] 0 2016-12-29 16:29:55.965 定时器[11673:278678] 1 2016-12-29 16:29:56.901 定时器[11673:278678] 2 2016-12-29 16:29:57.974 定时器[11673:278678] 3 2016-12-29 16:29:58.958 定时器[11673:278678] 4 2016-12-29 16:29:58.959 定时器[11673:278678] end
[self.timer invalidate]; self.timer = nil;
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo
// NSInvocation形式
- (void)timer2 {
NSMethodSignature *method = [ViewController instanceMethodSignatureForSelector:@selector(invocationTimeRun:)];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:method];
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 invocation:invocation repeats:YES];
// 设置方法调用者
invocation.target = self;
// 这里的SEL需要和NSMethodSignature中的一致
invocation.selector = @selector(invocationTimeRun:);
// 设置参数
// //这里的Index要从2开始,以为0跟1已经被占据了,分别是self(target),selector(_cmd)
// 如果有多个参数, 可依次设置3 4 5 ...
[invocation setArgument:&timer atIndex:2];
[invocation invoke];
NSLog(@"start");
}
- (void)invocationTimeRun:(NSTimer *)timer {
static NSInteger num = 0;
NSLog(@"%ld---%@", (long)num, timer);
num++;
if (num > 4) {
[timer invalidate];
}
}
2016-12-29 16:52:54.029 定时器[12089:289673] 0---<__NSCFTimer: 0x60000017d940> 2016-12-29 16:52:54.029 定时器[12089:289673] start 2016-12-29 16:52:55.104 定时器[12089:289673] 1---<__NSCFTimer: 0x60000017d940> 2016-12-29 16:52:56.095 定时器[12089:289673] 2---<__NSCFTimer: 0x60000017d940> 2016-12-29 16:52:57.098 定时器[12089:289673] 3---<__NSCFTimer: 0x60000017d940> 2016-12-29 16:52:58.094 定时器[12089:289673] 4---<__NSCFTimer: 0x60000017d940>
// NSInvocation形式
- (void)timer2 {
NSMethodSignature *method = [ViewController instanceMethodSignatureForSelector:@selector(invocationTimeRun:des:)];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:method];
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 invocation:invocation repeats:YES];
// 设置方法调用者
invocation.target = self;
// 这里的SEL需要和NSMethodSignature中的一致
invocation.selector = @selector(invocationTimeRun:des:);
// 设置参数
// //这里的Index要从2开始,以为0跟1已经被占据了,分别是self(target),selector(_cmd)
// 如果有多个参数, 可依次设置3 4 5 ...
[invocation setArgument:&timer atIndex:2];
// 设置第二个参数
NSString *dsc = @"第二个参数是字符串";
[invocation setArgument:&dsc atIndex:3];
[invocation invoke];
NSLog(@"start");
}
- (void)invocationTimeRun:(NSTimer *)timer des:(NSString *)dsc {
static NSInteger num = 0;
NSLog(@"%ld---%@--%@", (long)num, timer, dsc);
num++;
if (num > 4) {
[timer invalidate];
}
}
2016-12-29 16:57:45.087 定时器[12183:292324] 0---<__NSCFTimer: 0x60000016dbc0>--第二个参数是字符串 2016-12-29 16:57:45.088 定时器[12183:292324] start 2016-12-29 16:57:46.161 定时器[12183:292324] 1---<__NSCFTimer: 0x60000016dbc0>--第二个参数是字符串 2016-12-29 16:57:47.161 定时器[12183:292324] 2---<__NSCFTimer: 0x60000016dbc0>--第二个参数是字符串 2016-12-29 16:57:48.150 定时器[12183:292324] 3---<__NSCFTimer: 0x60000016dbc0>--第二个参数是字符串 2016-12-29 16:57:49.159 定时器[12183:292324] 4---<__NSCFTimer: 0x60000016dbc0>--第二个参数是字符串
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo
- (void)timer3 {
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(targetRun:) userInfo:@"这是携带的参数" repeats:YES];
NSLog(@"start");
}
- (void)targetRun:(NSTimer *)timer {
static NSInteger num = 0;
NSLog(@"%ld---%@--%@", (long)num, timer, timer.userInfo);
num++;
if (num > 4) {
[timer invalidate];
}
}
2016-12-29 17:05:11.590 定时器[12328:296879] start 2016-12-29 17:05:12.655 定时器[12328:296879] 0---<__NSCFTimer: 0x608000162700>--这是携带的参数 2016-12-29 17:05:13.661 定时器[12328:296879] 1---<__NSCFTimer: 0x608000162700>--这是携带的参数 2016-12-29 17:05:14.664 定时器[12328:296879] 2---<__NSCFTimer: 0x608000162700>--这是携带的参数 2016-12-29 17:05:15.651 定时器[12328:296879] 3---<__NSCFTimer: 0x608000162700>--这是携带的参数 2016-12-29 17:05:16.650 定时器[12328:296879] 4---<__NSCFTimer: 0x608000162700>--这是携带的参数
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
- (void)timer4 {
NSTimer *timer = [NSTimer timerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
static NSInteger num = 0;
NSLog(@"%ld", (long)num);
num++;
if (num > 4) {
[timer invalidate];
timer = nil;
NSLog(@"end");
}
}];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
NSLog(@"start");
}
2016-12-29 17:12:13.955 定时器[12498:301751] start 2016-12-29 17:12:15.013 定时器[12498:301751] 0 2016-12-29 17:12:16.018 定时器[12498:301751] 1 2016-12-29 17:12:17.011 定时器[12498:301751] 2 2016-12-29 17:12:18.024 定时器[12498:301751] 3 2016-12-29 17:12:19.023 定时器[12498:301751] 4 2016-12-29 17:12:19.023 定时器[12498:301751] end
[timer invalidate]; timer = nil;
dispatch_after(dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block)
- (void)gcdTimer {
// 延迟2s
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC);
dispatch_after(delayTime, dispatch_get_main_queue(), ^(void){
NSLog(@"延迟2s后执行");
});
NSLog(@"start");
}
void dispatch_source_set_timer(dispatch_source_t source, dispatch_time_t start, uint64_t interval, uint64_t leeway)
// 重复执行的定时器
- (void)gcdTimer1 {
// 获取全局队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// 创建定时器
dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
// 开始时间
dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC));
// dispatch_time_t start = dispatch_walltime(NULL, 0);
// 重复间隔
uint64_t interval = (uint64_t)(1.0 * NSEC_PER_SEC);
// 设置定时器
dispatch_source_set_timer(_timer, start, interval, 0);
// 设置需要执行的事件
dispatch_source_set_event_handler(_timer, ^{
//在这里执行事件
static NSInteger num = 0;
NSLog(@"%ld", (long)num);
num++;
if (num > 4) {
NSLog(@"end");
// 关闭定时器
dispatch_source_cancel(_timer);
}
});
// 开启定时器
dispatch_resume(_timer);
NSLog(@"start");
}
2016-12-30 10:15:01.114 定时器[3393:99474] start 2016-12-30 10:15:02.187 定时器[3393:99796] 0 2016-12-30 10:15:03.114 定时器[3393:99796] 1 2016-12-30 10:15:04.186 定时器[3393:99796] 2 2016-12-30 10:15:05.188 定时器[3393:99796] 3 2016-12-30 10:15:06.188 定时器[3393:99796] 4 2016-12-30 10:15:06.188 定时器[3393:99796] end
dispatch_time_t start = dispatch_walltime(NULL, 0);
// 关闭定时器 // 完全销毁定时器, 重新开启的话需要重新创建 // 全局变量, 关闭后需要置为nil dispatch_source_cancel(_timer); // 暂停定时器 // 可使用dispatch_resume(_timer)再次开启 // 全局变量, 暂停后不能置为nil, 否则不能重新开启 dispatch_suspend(_timer);
+ (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel
- (void) displayLink {
CADisplayLink *display = [CADisplayLink displayLinkWithTarget:self selector:@selector(displayRun:)];
// 大概1s执行一次
// 取值范围 1--100, 值越大, 频率越高
display.preferredFramesPerSecond = 2;
[display addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
- (void)displayRun:(CADisplayLink *)link {
static NSInteger num = 0;
NSLog(@"%ld", (long)num);
num++;
if (num > 4) {
[link invalidate];
NSLog(@"end");
}
}
// 暂停 display.paused = YES; // 继续 display.paused = NO;
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有