rac_textSignal-Implementation使用"defer“返回”RACSignal“上的self。这是什么原因呢?
具体实现如下:
- (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]];
}发布于 2015-06-02 05:52:31
延迟信号和级联信号都发送UITextFields (实际上是self)。
延迟信号使返回的信号在订阅时发送当前存储的文本,因为[self rac_signalForControlEvents:UIControlEventEditingChanged]只发送更改。
发布于 2015-06-02 14:22:30
如果您要省略、延迟并实现它,则如下所示:
- (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结束。
发布于 2016-08-10 17:20:07
我认为延期只是为了防止保留周期。
https://stackoverflow.com/questions/30559997
复制相似问题