首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RACSignal:为什么使用rac_textSignal a "defer“将RACSignal返回给self?

RACSignal:为什么使用rac_textSignal a "defer“将RACSignal返回给self?
EN

Stack Overflow用户
提问于 2015-06-01 00:51:44
回答 3查看 332关注 0票数 4

rac_textSignal-Implementation使用"defer“返回”RACSignal“上的self。这是什么原因呢?

具体实现如下:

代码语言:javascript
复制
- (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]];
}
EN

回答 3

Stack Overflow用户

发布于 2015-06-02 05:52:31

延迟信号和级联信号都发送UITextFields (实际上是self)。

延迟信号使返回的信号在订阅时发送当前存储的文本,因为[self rac_signalForControlEvents:UIControlEventEditingChanged]只发送更改。

票数 3
EN

Stack Overflow用户

发布于 2015-06-02 14:22:30

如果您要省略、延迟并实现它,则如下所示:

代码语言:javascript
复制
- (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结束。

票数 1
EN

Stack Overflow用户

发布于 2016-08-10 17:20:07

我认为延期只是为了防止保留周期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30559997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档