2010-11-30 60 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對象)幾乎總是一個壞主意。一旦你這樣做了,就會變得很容易讓多個對象都試圖做出自己的改變,並彼此跺腳。