2015-05-29 24 views
0

如果我有一個副本屬性,並將其設置爲另一個對象,其實我創建一個新的對象與1的iOS複製特性創建新對象,保留,內存分配

@property (copy) myObject; 
myobject = someOtherObject; 
//&myOBject != &someOtherObject 

一個保留計數在這點,讓我們調用myObject的地址& myObject1。

如果我去做到這一點後,我設置myObject的到someOtherObject

myObject = someOtherObject2 

會發生什麼& myObject1?現在,myObject指向的值等於someOtherObject2的值,但是位於新的內存地址處。 & myObject1會發生什麼,還有什麼東西仍然指向它?

回答

0

請注意,該問題中的@property語句沒有提供類型。

如果someOtherObject是不可變的,則不進行復制,只有引用計數遞增,並且myobjectsomeOtherObject都指向相同的對象。這是所有需要的,因爲一個不可變的對象是不能改變的。對任一指針的改變都會改變單個對象。

如果someOtherObject是可變的,則進行復制並且現在有兩個不同的實例。原始someOtherObject沒有變化。 my objectsomeOtherObject都指向不同的實例,並且彼此沒有關係。如果它們是可變的,那麼改變一個不會改變另一個。

+0

那麼如果我將它設置爲'someOtherObject'是可變的,然後我將它設置爲'someOtherObject2',這也是可變的?在我第二次設置後,'&myObject'會發生什麼? – noobsmcgoobs

+0

您需要指定「它」是什麼。用一個指定對象類型(可變或不可變)的完整示例更新你的問題會更好。類型的簡單選擇是'NSMutableString'和'NSString'。 – zaph