2010-11-30 63 views
1

很容易理解简单数据的setter/getter概念,例如NSInteger。无法理解带对象的getter/setter

如果我们说:NSInteger a;

“a”的setter更改a的值,并且getter只获取(返回)其值。因此原子/非原子概念很容易理解,因为原子将保证当chnaged时读“a”将始终返回一个完整的值(getter和setter被同步)。

但是我不清楚的是setter和getter是指向对象的指针的属性(例如NSData *,NSString *)。比方说,例如一个NSMutableData:

如果我们说:NSMutableData * m_my_mutable;

想象一下,我有一个setter setMyMutable和getMyMutable属性属于我的对象MyObject。如果我这样做,那么我会打电话给吸附材料(因为我追加数据之前获取的对象):

[myObject的getMyMutable] appendData ....]

但appendingData也将修改,因此要高度重视不是它被看作是一个二传手行动吗?或者,制定者只是指启动价值的事实(例如可以保留)。

这个概念中我必须忽略一些东西。

感谢 Apple92

回答

0

设置确实仅指初始化。这就是为什么原子性不足以确保可变数据结构是线程安全的原因。相反,你得到的保证是对象只能被一次性地替换或读取,所以你不会结束部分分配。

2

setter设置属性的值。当您设置整数属性时,会存储一个新的整数值。当您设置对象属性时,会存储一个新对象。 appendData:不会更改属性 - 它会更改数据对象本身。一个atomic属性只会确保该属性拥有一些完整的值或另一个值 - 它不会影响您对属性内的对象所做的操作。顺便说一下,拥有可以在拥有对象外部访问的可变状态(如NSMutableData对象)几乎总是一个坏主意。一旦你这样做了,就会变得很容易让多个对象都试图做出自己的改变,并彼此跺脚。