Ios RACSignal:为什么使用rac_textSignal a";“推迟”;向自身返回RAC信号?
使用“延迟”返回“self”上的RAC信号。 原因是什么 这就是实现:Ios RACSignal:为什么使用rac_textSignal a";“推迟”;向自身返回RAC信号?,ios,reactive-cocoa,Ios,Reactive Cocoa,使用“延迟”返回“self”上的RAC信号。 原因是什么 这就是实现: - (RACSignal *)rac_textSignal { @weakify(self); return [[[[[RACSignal defer:^{ @strongify(self); return [RACSignal return:self]; }] concat:[self rac_signalFor
- (RACSignal *)rac_textSignal {
@weakify(self);
return [[[[[RACSignal
defer:^{
@strongify(self);
return [RACSignal return:self];
}]
concat:[self rac_signalForControlEvents:UIControlEventEditingChanged]]
map:^(UITextField *x) {
return x.text;
}]
takeUntil:self.rac_willDeallocSignal]
setNameWithFormat:@"%@ -rac_textSignal", [self rac_description]];
}
延迟信号和级联信号都发送
UITextField
s(实际上是self
)
延迟信号使返回的信号在订阅时发送当前存储的文本,因为
[self rac\u signalForControlEvents:UIControlEventEditingChanged]
仅在更改时发送。如果省略延迟并像以下那样实现它:
- (RACSignal *)rac_textSignal {
@weakify(self);
return [[[[[RACSignal return:self]
concat:[self rac_signalForControlEvents:UIControlEventEditingChanged]]
map:^(UITextField *x) {
return x.text;
}]
takeUntil:self.rac_willDeallocSignal]
setNameWithFormat:@"%@ -rac_textSignal", [self rac_description]];
}
我仍然不能完全理解
RAC
内存管理,但是,在上述实现中,您的信号将强烈引用self
,永远不会完成,你最终会变成僵尸UITextField
我认为延迟只是为了防止保留周期为什么延迟是必要的?可能适合弱/强舞蹈。编辑:看起来Jakub得出了相同的结论。