前言
RAC是iOS開發(fā)中經(jīng)常使用到響應(yīng)式框架,在OC中可以通過(guò)pod導(dǎo)入
pod 'ReactiveObjC'
RAC信號(hào)創(chuàng)建與發(fā)送
RAC中一個(gè)常見的流程:
1.創(chuàng)建一個(gè)信號(hào)
2.訂閱信號(hào)
3.發(fā)送信號(hào)
RACSignal的作用就是創(chuàng)建一個(gè)信號(hào),默認(rèn)冷信號(hào)(未被訂閱)
//RACSignal創(chuàng)建一個(gè)信號(hào)(默認(rèn)冷信號(hào))
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
return nil;
}];
通過(guò)subscribeNext進(jìn)行訂閱
[signal subscribeNext:^(id _Nullable x) {
//x為收到信號(hào)內(nèi)容
NSLog(@"%@", x);
}];
在創(chuàng)建RACSignal時(shí),可發(fā)現(xiàn)block:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) ,其中subscriber負(fù)責(zé)發(fā)送消息,RACDisposable負(fù)責(zé)取消訂閱
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
[subscriber sendNext:@"信號(hào)"];
//subscriber被釋放時(shí)才會(huì)進(jìn)入
return [RACDisposable disposableWithBlock:^{
//取消訂閱回調(diào)
NSLog(@"訂閱取消");
}];
}];
注意:[RACDisposable disposableWithBlock:]只有在subscriber被釋放時(shí),才會(huì)調(diào)用,如果我們創(chuàng)建一個(gè)強(qiáng)引用屬性持有subscriber,這句代碼不會(huì)執(zhí)行。
在訂閱信號(hào)時(shí)subscribeNext 返回一個(gè)RACDisposable,可保存該對(duì)象,通過(guò)dispose手動(dòng)釋放
RACDisposable *disposable = [signal subscribeNext:^(id _Nullable x) {
//x為信號(hào)內(nèi)容
NSLog(@"%@", x);
}];
[disposable dispose];