延时执行方法
GCD的延时方法
// 延时执行
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0/** 延时的时间*/ * NSEC_PER_SEC));
dispatch_after(delayTime, dispatch_get_main_queue(), ^{
NSLog(@"延时1秒时间到~")
});
RAC延时方法
// 延时执行
[[RACScheduler mainThreadScheduler]afterDelay:1.0 schedule:^{
NSLog(@"延时1秒时间到~")
}];
delay: 延迟发送
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"计时开始");
RACSignal *racDelay = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"一秒后接收"];
return nil;
}];
[[racDelay delay:1.0] subscribeNext:^(id _Nullable x) {
NSLog(@"什么嘛:%@",x);
}];
}
控制台结果
--TIME:09:25:46.408000+0800【FILE:MyIntegralInfoVc.m--LINE:30】FUNCTION:-[MyIntegralInfoVc viewDidLoad]
计时开始
--TIME:09:25:47.507000+0800【FILE:MyIntegralInfoVc.m--LINE:36】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke_2
什么嘛:一秒后接收
//看这输出结果 大概是 1 秒 貌似不是非常精准的1秒但确实是有延迟
interval 定时:每隔一段时间发出一次信号
NSLog(@"计时开始");
[[RACSignal interval:1.0 onScheduler:[RACScheduler currentScheduler]] subscribeNext:^(id x) {
NSLog(@"每隔1秒发送一次信号%@",x);
}];
控制台结果
--TIME:09:58:56.541000+0800【FILE:MyIntegralInfoVc.m--LINE:30】FUNCTION:-[MyIntegralInfoVc viewDidLoad]
计时开始
--TIME:09:58:57.542000+0800【FILE:MyIntegralInfoVc.m--LINE:32】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke
每隔1秒发送一次信号2021-11-06 01:58:57 +0000
--TIME:09:58:58.542000+0800【FILE:MyIntegralInfoVc.m--LINE:32】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke
每隔1秒发送一次信号2021-11-06 01:58:58 +0000
--TIME:09:58:59.542000+0800【FILE:MyIntegralInfoVc.m--LINE:32】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke
每隔1秒发送一次信号2021-11-06 01:58:59 +0000
--TIME:09:59:00.542000+0800【FILE:MyIntegralInfoVc.m--LINE:32】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke
每隔1秒发送一次信号2021-11-06 01:59:00 +0000
... ...
timeout 超时,可以让一个信号在一定的时间后,自动报错
NSLog(@"计时开始");
RACSignal *racTimeout = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"超时后发送error信号"];
return nil;
}] timeout:2.f onScheduler:[RACScheduler currentScheduler]];
[racTimeout subscribeNext:^(id _Nullable x) {
NSLog(@"什么嘛:%@",x);
}error:^(NSError * _Nullable error) {
NSLog(@"timeout:%@",error);
}];
控制台结果
--TIME:09:52:24.145000+0800【FILE:MyIntegralInfoVc.m--LINE:30】FUNCTION:-[MyIntegralInfoVc viewDidLoad]
计时开始
--TIME:09:52:24.146000+0800【FILE:MyIntegralInfoVc.m--LINE:37】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke_2
什么嘛:超时后发送error信号
--TIME:09:52:26.146000+0800【FILE:MyIntegralInfoVc.m--LINE:39】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke_3
timeout:Error Domain=RACSignalErrorDomain Code=1 "(null)"
网友评论