Objective c “预支”是否有好处;“自我”;到钥匙道?
我看到许多键路径被指定为Objective c “预支”是否有好处;“自我”;到钥匙道?,objective-c,cocoa,key-value-observing,Objective C,Cocoa,Key Value Observing,我看到许多键路径被指定为self.someProperty,而不仅仅是someProperty。这样做有好处吗?这两个关键路径等效吗 编辑:我说的是键路径字符串,例如在绑定中使用的,发送到observeValueForKeyPath:,或从键路径返回的,保存值影响值forKey:您是指使用值forKey:/设置值:forKey:还是直接根据以下两者之间的差异: var = 8; self.var = 8; 假设是后者,区别在于前者直接存储值,即C风格,而后者调用setter(或getter,取
self.someProperty
,而不仅仅是someProperty
。这样做有好处吗?这两个关键路径等效吗
编辑:我说的是键路径字符串,例如在绑定中使用的,发送到
observeValueForKeyPath:
,或从键路径返回的,保存值影响值forKey:
您是指使用值forKey:
/设置值:forKey:
还是直接根据以下两者之间的差异:
var = 8;
self.var = 8;
假设是后者,区别在于前者直接存储值,即C风格,而后者调用setter(或getter,取决于上下文)
调用该方法基本上不需要花费任何费用就可以解决该问题,但它的优点是:
- 属性是关键值;及
- 您可以向集合中添加任何其他处理逻辑。但除此之外:子类也可以,这样您的类就可以在大型项目中成为更好的公民
编辑:如果是前者,那么,不,没有行为上的优势,但我想在自己身上使用键值编码是一件非常不寻常的事情,它有一个让它看起来不寻常的好处?您谈论的是属性引用,但使用的是术语keypath,这在KVC中有意义。非常令人困惑……如果您的意思是经常看到这一点:
[self-valueForKeyPath:@“self.someProperty”]
,那么我会说不,这样做没有好处,甚至会降低可读性。那么实例变量的默认命名呢?实例变量不会被称为\u var
?对不起,我不清楚;我说的是valueForKey
关键路径,据我所知,var
和self.var
是同一回事。这是真的吗?var
和self.var
可能是同一回事。如果您使用@synthesis var进行合成代码>那么是的,它们是。。。但是你也可以@synthesis var=\u var
,在这种情况下,self.var
和\u var
是相同的东西。因为合成导致创建实例变量,所以有些人希望在它前面加下划线。