资讯专栏INFORMATION COLUMN

ReactiveCocoa--RACScheduler

curried / 1625人阅读

摘要:基本信息父类子类类含义调度类遵循的协议无属性无例子显示网络下载的图片这段代码会在后台线程立即发起一个请求,然后传递到主线程上更新发起请求信号传递方法介绍主线程调度当前队列调度这方法相当于执行了指定等级的异步并发队列,这个其实调用的是其中类

基本信息
父类 NSObject
子类 RACImmediateScheduler
RACQueueScheduler
RACSubscriptionScheduler
RACTestScheduler
类含义 RAC调度类
遵循的协议
属性
例子

显示网络下载的图片

    RAC(self.imageView, image) = [[RACSignal startEagerlyWithScheduler:[RACScheduler schedulerWithPriority:RACSchedulerPriorityBackground]
                                                                 block:^(id  subscriber) {
        NSError *error;
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://ww3.sinaimg.cn/bmiddle/7128be06jw1ei4hfthoj3j20hs0bomyd.jpg"]
                                             options:NSDataReadingMappedAlways
                                               error:&error];
        if(error) {
            [subscriber sendError:error];
        }
        else {
            [subscriber sendNext:[UIImage imageWithData:data]];
            [subscriber sendCompleted];
        }
    }] deliverOn:[RACScheduler mainThreadScheduler]];

这段代码会在后台线程立即发起一个请求,然后传递到主线程上更新UI

发起请求: + (RACSignal *)startEagerlyWithScheduler:(RACScheduler *)scheduler block:(void (^)(id subscriber))block;

信号传递: - (RACSignal *)deliverOn:(RACScheduler *)scheduler

方法介绍
    + (RACScheduler *)mainThreadScheduler;

主线程调度


    + (RACScheduler *)currentScheduler;

当前队列调度


    + (RACScheduler *)scheduler;

这方法相当于执行了[RACScheduler schedulerWithPriority:RACSchedulerPriorityDefault];


    + (RACScheduler *)schedulerWithPriority:(RACSchedulerPriority)priority;

指定等级的异步并发队列,这个其实调用的是

[[RACTargetQueueScheduler alloc] initWithName:name targetQueue:dispatch_get_global_queue(priority, 0)];

其中RACTargetQueueScheduler类的父类是RACQueueScheduler,而且RACQueueScheduler中有个方法是:

- (RACDisposable *)schedule:(void (^)(void))block {
    NSCParameterAssert(block != NULL);
    RACDisposable *disposable = [[RACDisposable alloc] init];
    dispatch_async(self.queue, ^{
        if (disposable.disposed) return;
        [self performAsCurrentScheduler:block];
    });
    return disposable;
}

可以看到最终用的还是dispatch_async的异步调用

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15590.html

相关文章

发表评论

0条评论

curried

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<