Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 无法理解带有对象的getter/setter_Objective C_Setter_Conceptual_Getter - Fatal编程技术网

Objective c 无法理解带有对象的getter/setter

Objective c 无法理解带有对象的getter/setter,objective-c,setter,conceptual,getter,Objective C,Setter,Conceptual,Getter,简单数据的setter/getter概念很容易理解,例如NSInteger 如果我们说:NSInteger a “a”的setter更改a的值,getter只获取(返回)其值。这样就很容易理解原子/非原子概念,因为原子将保证在对a进行更改时读取“a”将始终返回一个完整的值(getter和setter是同步的) 但我不清楚的是,属性的setter和getter是指向对象的指针(例如NSData*,NSString*)。例如,假设NSMutableData: 如果我们说:NSMutableData*

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

如果我们说:NSInteger a

“a”的setter更改a的值,getter只获取(返回)其值。这样就很容易理解原子/非原子概念,因为原子将保证在对a进行更改时读取“a”将始终返回一个完整的值(getter和setter是同步的)

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

如果我们说:NSMutableData*m_my_mutable

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

[[MyObject getMyMutable]appendData….]

但是附加数据也会修改它,因此它不应该被视为setter操作吗?或者setter只是指初始化一个值的事实(例如可以保留)

在这个概念中,我肯定遗漏了一些东西

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

setter设置属性的值。设置integer属性时,将存储新的整数值。设置对象特性时,将存储一个新对象<代码>追加数据:不会更改属性-它会更改数据对象本身。原子属性只会确保该属性包含一些完整的值,而不会影响您对属性中的对象所做的操作

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