_ 代表局部变量吗?
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=] 属性(nonatomic
、strong
等)。
在您 link 的示例中,subscribeCommand
方法是 subscribeCommand
属性 的显式 getter。没有 setSubscribeCommand
方法,因此将使用默认的 setter(这将强制执行 属性 的 strong
和 nonatomic
属性)。
我对 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=] 属性(nonatomic
、strong
等)。
在您 link 的示例中,subscribeCommand
方法是 subscribeCommand
属性 的显式 getter。没有 setSubscribeCommand
方法,因此将使用默认的 setter(这将强制执行 属性 的 strong
和 nonatomic
属性)。