RACSchedulerAPI注意事项:
// 主线程的Scheduler
RACScheduler *mainScheduler = [RACScheduler mainThreadScheduler];
// 子线程的两个Scheduler,注意[RACScheduler scheduler]是返回一个新的
RACScheduler *scheduler1 = [RACScheduler scheduler];
RACScheduler *scheduler2 = [RACScheduler scheduler];
// 返回当前的Scheduler,自定义线程会(比如使用GCD等自定义线程)返回nil
RACScheduler *scheduler3 = [RACScheduler currentScheduler];
// 创建优先级Scheduler,不建议除非你知道你在干什么
RACScheduler *scheduler4 = [RACScheduler schedulerWithPriority:RACSchedulerPriorityHigh];
RACScheduler *scheduler5 = [RACScheduler schedulerWithPriority:RACSchedulerPriorityHigh name:@"RACSchedulerPriorityHigh"];
// 创建立即Scheduler,不建议除非你知道你在干什么
RACScheduler *scheduler6 = [RACScheduler immediateScheduler];
RACDisposable *disposeable = [mainScheduler schedule:^{
NSLog(@"执行:mainScheduler");
}];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *date = [formatter dateFromString:@"2021-04-16 17:55:24"];
// 指定时间执行
[scheduler1 after:date schedule:^{
NSLog(@"scheduler1执行");
}];
// 指定延迟多久执行
[scheduler2 afterDelay:3 schedule:^{
NSLog(@"scheduler2执行");
}];
// 从现在开始,每1秒执行一次,最长不能操作1.1秒执行。
[scheduler3 after:[NSDate date] repeatingEvery:1 withLeeway:.1 schedule:^{
NSLog(@"scheduler3执行");
}];
// 执行结果
2021-04-16 17:54:57.391383+0800 NetSchool[4182:1244696] scheduler3执行
2021-04-16 17:54:57.401024+0800 NetSchool[4182:1244696] scheduler3执行
2021-04-16 17:54:58.158168+0800 NetSchool[4182:1244696] scheduler3执行
2021-04-16 17:54:59.060772+0800 NetSchool[4182:1244696] scheduler3执行
2021-04-16 17:54:59.060964+0800 NetSchool[4182:1244836] scheduler2执行
2021-04-16 17:55:00.155330+0800 NetSchool[4182:1244696] scheduler3执行
2021-04-16 17:55:01.155704+0800 NetSchool[4182:1244696] scheduler3执行
2021-04-16 17:55:02.155509+0800 NetSchool[4182:1244696] scheduler3执行
2021-04-16 17:55:03.122474+0800 NetSchool[4182:1244696] scheduler3执行
2021-04-16 17:55:04.157883+0800 NetSchool[4182:1244696] scheduler3执行
2021-04-16 17:55:05.155716+0800 NetSchool[4182:1244696] scheduler3执行
2021-04-16 17:55:06.105812+0800 NetSchool[4182:1244696] scheduler3执行
2021-04-16 17:55:07.072486+0800 NetSchool[4182:1244696] scheduler3执行
.
.
.
// RACScheduler vs GCD
// Scheduler使用GCD来实现
// 可以"取消"——这里的取消知识block不执行了,但任务依然执行。
// 与RAC其他组件高度整合
// 一个Scheduler保证串行执行
// 一个Scheduler的任务不保证线程是同一个。









网友评论