代码改变世界

ReactiveCocoa 监听布尔(BOOL)类型改变

2018-12-20 14:27  菜鸟Alex  阅读(1209)  评论(0编辑  收藏  举报
  • Oc中ReactiveCocoa 如何监听基本数据类型

  • 借用Stack Overflow例子

  • 如果监听detache 的改变

@interface Node : NSObject
@property (nonatomic, assign) BOOL detached;
@end

  • 错误的实现方式如下:
@implementation Node

- (void)setParentNode:(Node *)parentNode {
    _parentNode = parentNode;
    RAC(self, detached) = [RACObserve(_parentNode, detached) filter:^BOOL(id value) {
        return [value boolValue];
    }];
}

@end
  • 错误一: 尽量不要在setter方法中构造信号,因为有肯能get 或者 set 方法会被多次调用,有可能会引起内存泄漏或者其他(个人猜测)

  • 正确方式如下(ReactiveCocoa主要贡献者的回答):

  • 在init方法中进行监听

- (id)init {
    self = [super init];
    if (self == nil) return nil;

    // Use @NO instead if that makes more sense as a default.
    // @YES相当于设置默认为YES
    RAC(self, detached, @YES) = [RACObserve(self, parentNode.detached) filter:^(NSNumber *detached) {
        return [detached boolValue];
    }];

    return self;
}

原文链接