在ReactiveCococa 2.5中,RACMulticastConnection具有信号属性,这是 RACSignal ,而在其实现中,它具有ivar _signal ,这是一个 RACSubject 。我只是想知道信号的备份ivar是否是_signal,如何解释它?
好吧,似乎我的问题不明确,我在这里放了一些演示代码,希望有人能回答。头文件:
@interface RACMulticastConnection : NSObject
@property (nonatomic, strong, readonly) RACSignal *signal;
...
@end
impl文件:
@interface RACMulticastConnection () {
RACSubject *_signal;
...
}
...
还有一件事,它的实现中没有@synthesize代码,众所周知,RACSubject是RACSignal的子类。
答案 0 :(得分:0)
如果我理解你的问题是正确的,要为ivar提供属性的显式名称,只需添加
即可@synthesize propertyName = ivarName;
如果您不提供名称,则编译器会使用模板为您执行此操作:
@synthesize propertyName = _propertyName;
我希望,我回答了你的问题。
答案 1 :(得分:0)
我只是想知道信号的备份ivar是否是_signal
也许......
@synthesize signal
,则该属性将自动实施(标准方法),而ivar _signal
将用作支持变量。如果没有ivar _signal
,则会自动创建一个。留下两个主要是历史的选项:
如果有@synthesize signal
那么会引入一个ivar signal
作为支持变量,并且声明的ivar _signal
无论如何都不会与属性。
最后,如果有@synthesize signal = _signal
,则ivar _signal
将用作支持变量。
附录:评论/问题编辑后
您对该问题的修改只是修复了第一个项目符号的上述答案(无@synthesize
案例)。
也许您担心属性RACSignal *
,而ivar的类型为RACSubject *
?
请记住该属性为readonly
,因此分配给它的唯一方法是在实现中使用_signal
赋值,编译器将检查此类赋值是否具有{{1}类型}(或子类型)。
该类的客户端使用该属性读取值,并告知该值为RACSubject *
类型,并且RACSignal *
是RACSubject
的子类,因此一切都是类型正确的。
将RACSignal
用于ivar是一种改进实现中检查的方法 - 即属性返回RACSubject *
但实现知道它将始终返回子类RACSignal *
,为什么没有说明编译器会在没有情况时捕获案例吗?
为了演示编译器正在检查尝试更改RACSubject
的类型,比如_signal
,您将收到编译器错误,指出该类型不符合属性所需的类型。
HTH