无法理解带对象的getter / setter

时间:2010-11-30 23:24:11

标签: objective-c setter conceptual getter

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

如果我们说:NSInteger a;

“a”的setter改变了a的值,而getter只获取(返回)它的值。然后很容易理解原子/非原子概念,因为原子将保证在被打包时读取“a”总是返回一个整数值(getter和setter是同步的)。

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

如果我们说:NSMutableData * m_my_mutable;

想象一下,这个属性的setter setMyMutable和getMyMutable属于我的对象MyObject。如果我这样做,那么我将调用getter(因为我在添加数据之前得到了对象):

[[MyObject getMyMutable] appendData ....]

但是appendingData也会修改它,因此它不会被视为一个setter动作吗?或者setter只引用了初始化值的事实(例如可以保留)。

在概念中我必须缺少一些东西。

由于 Apple92

2 个答案:

答案 0 :(得分:2)

setter设置属性的值。设置整数属性时,将存储新的整数值。设置对象属性时,将存储新对象。 appendData:不会更改属性 - 它会更改数据对象本身。原子属性只会确保属性保存一些完整的值或其他值 - 它不会影响您对属性内对象的操作。

顺便提一下,拥有可在所拥有对象外部访问的可变状态(例如NSMutableData对象)几乎总是一个坏主意。一旦你这样做,让多个对象都试图做出自己的改变并相互踩踏就变得太容易了。

答案 1 :(得分:0)

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