在哪些情况下,在访问实例变量时放弃使用self是个好主意?

时间:2009-05-07 16:46:03

标签: iphone cocoa cocoa-touch uikit

这可能是一个非常愚蠢的初学者问题,但是:

如果您的类中有一些很好的实例变量,例如UIScrollview * scrollView2,那么为什么要通过放弃

来绕过getter和setter
[self.scrollView2 addSubview:imageView];

,而不是做

[scrollView2 addSubview:imageView]; 

?我的意思是......越过吸气剂并没有伤害,实际上我认为这总是要走的路。但在所有Apple的例子中,我都错过了这种模式。他们在调用方法时很少使用self.someInstanceVariable。或者我弄错了什么?

我开始做同样的事情,因为苹果做到了,但我想知道:为什么?

3 个答案:

答案 0 :(得分:3)

它与KVO (Key-Value Observing)KVC (Key-Value Coding)有关。如果绕过getter或setter,则观察该值的对象将无法获取该消息。

答案 1 :(得分:2)

我曾经绕过getter / setter,直到我发现直接访问变量时绑定不起作用。换句话说,键值编码仅在使用getter / setter函数访问属性时才有效。

编辑:有关KVC合规性,请参阅this page

答案 2 :(得分:1)

通常,您不会使用initdealloc中的属性,因为您的对象可能不处于“安全”状态,所以最好直接访问实例变量。