2011-05-10 65 views
0

我只是想知道,从类内部访问属性时,我必须做[self someProperty]self.someProperty?或者可以简单地将它简称为somePropertyObjective-C属性

编辑:鉴于属性的名称不冲突/ shawdow ....

+0

可能重复[何时访问属性与自我,什么时候不?](http://stackoverflow.com/questions/4884231/when-to-access-property-with-self-and-when-not- to) – 2011-05-10 20:50:42

回答

0

[自someProperty]或self.someProperty?或者可以安全地将它简称为someProperty?

任何一个都没问题。但在课堂范围内时,我不想使用self

someValue = 10 ; 
[ self someValue ] = 20 ; 
self.someValue = 30 ; 

以上所有的三条语句都将修改接口变量someValue

+0

当然,将它作为简单访问而不是消息传递的反驳是,将属性切换为原子或使其成为您的某个隐含部分变得非常费力。而且,对于设置,您可以击败第三方尝试观察关键值。 – Tommy 2011-05-10 20:50:21

+0

'[self someValue] = 20;',也许是一个错字。我不知道这是合法的Objective-C。 – idz 2011-05-11 04:43:30

+0

中间的一个不会修改任何东西。你需要调用setter来修改实例变量:'[self setSomeValue:20]'。 – 2011-06-03 01:49:44

2

两者都可以工作。 .someProperty表示法可以说有点安全,因为如果你在那里犯了一个错字,编译器会发出错误;相反,错字[self someProperty]只会产生警告。

1

在读取值时使用someProperty来引用实例变量是很好的,但是当设置值时,如果您没有使用[self setSomeProperty:]或self.someProperty =,那么将没有键 - 价值观察消息发送。所以如果其他对象正在观察这个属性,它们将不会被正确更新。

这可以通过直接设置实例变量来实现,但通常需要观察才能正常工作。