_ 代表局部变量吗?

does _ represent local variable?

我对 ReactiveCocoa 和 Objective-C 还很陌生。我看到在下面的代码中使用了 _subscribeCommand 但没有声明它的地方。它与 subscribeCommand 方法一致。那么这是局部变量吗?

- (RACCommand *)subscribeCommand {
  if (!_subscribeCommand) {
      NSString *email = self.email;
      _subscribeCommand = [[RACCommand alloc] initWithEnabled:self.emailValidSignal signalBlock:^RACSignal *(id input) {
          return [SubscribeViewModel postEmail:email];
      }];
  }
  return _subscribeCommand;
}

在本教程中找到了完整代码 http://codeblog.shape.dk/blog/2013/12/05/reactivecocoa-essentials-understanding-and-using-raccommand/

当您在 class 上创建 属性 时,Objective-C 将创建一个与 属性 同名但带有下划线前缀的实例变量。在教程中你 link 有一个 subscribeCommand 属性:

@property(nonatomic, strong) RACCommand *subscribeCommand;

在 class 中,您可以使用 getters/setters 使用 self.subscribeCommand 访问此 属性 或使用 _subscribeCommand.[=21= 直接访问变量]

如果您直接访问实例变量,您将绕过 getter/setter,无论是 class 中的显式 getter/setter 还是强制 [=] 的隐式 getter/setter 41=] 属性(nonatomicstrong 等)。

在您 link 的示例中,subscribeCommand 方法是 subscribeCommand 属性 的显式 getter。没有 setSubscribeCommand 方法,因此将使用默认的 setter(这将强制执行 属性 的 strongnonatomic 属性)。