我是反应性可可的新手。我正在尝试通过信号设置按钮enable属性。
我有下面的代码片段,可以正常工作:

RACSignal *formValid = [RACSignal
                        combineLatest:@[username.rac_textSignal, password.rac_textSignal, confirmPassword.rac_textSignal]
                        reduce:^(NSString *username, NSString *password, NSString *passwordVerification) {
                                return @([username length] > 0 && [password length] > 3 && [password isEqual:passwordVerification]);
                        }];

RAC(signUp,enabled) = formValid;

但是,我还遇到了另一段效果很好的代码:
    [[RACSignal
      combineLatest:@[username.rac_textSignal, password.rac_textSignal,confirmPassword.rac_textSignal]
      reduce:^(NSString *firstName, NSString *passwd, NSString *confirmPass){
             return @( firstName.length > 0 && passwd.length > 0 && confirmPass.length > 0);
      }] setKeyPath:@"enabled" onObject:resetButton];

我想弄清楚这两种方法在内部实现中是否完全相似,或者在某些情况下是否优于其他方法。
简单来说,谁能解释我在性能方面的差异???

谢谢

最佳答案

如果您检出RAC宏并按照说明进行操作,您会发现它最终会导致对-setKeyPath:onObject:的调用。 RAC宏是为了方便起见(语法糖),对性能没有影响。我看到的唯一需要使用-setKeyPath:onObject:的情况是,当您需要访问由基础订阅创建的一次性对象时。我认为您不会发现很多情况下必须自己处置基础订阅。

10-08 05:31