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