1

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

如果我们说:NSInteger a;

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

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

如果我们说: NSMutableData *m_my_mutable;

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

[[MyObject getMyMutable] appendData....]

但是 appendingData 也会修改它,因此它不应该被视为一个 setter 动作吗?还是 setter 仅指初始化值的事实(例如可以保留)。

我必须在这个概念中遗漏一些东西。

谢谢 Apple92

4

2 回答 2

2

setter 设置属性的值。设置整数属性时,将存储一个新的整数值。设置对象属性时,将存储一个新对象。appendData:不会改变属性——它会改变数据对象本身。原子属性只会确保该属性拥有某个完整的值或其他值——它不会影响您对属性内的对象所做的操作。

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

于 2010-11-30T23:56:08.907 回答
0

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

于 2010-11-30T23:43:14.330 回答