2011-04-15 43 views
-1

可能重複發生的事情:
what happens if you add your just created object to a mutable array, and you release your object in objc如果您在剛剛創建對象添加到一個可變的數組,你釋放你的對象

如果您剛剛創建的對象添加到會發生什麼一個可變的數組,並且你釋放你的對象

+3

五小時前發生的同樣的事情,當你問同樣的問題。 – 2011-04-15 07:32:07

+0

發表我的答案之前看到dup :-( – taskinoor 2011-04-15 07:34:22

回答

0

假設它是你擁有的對象(例如它是用alloc創建的,而不是一些方便的構造函數如stringWithFormat:),該數組現在是該對象的唯一所有者。當數組被解除分配或從數組中移除對象時,它將被解除分配,除非另一個對象擁有它。

3

NSArray或NSMutableArray保留對象。所以你的對象將被保留,直到你從數組中移除對象或釋放數組本身。

MyClass *obj = [[MyClass alloc] init]; 
[myMutableArray addObject:obj]; // obj is retained by array 
[obj release]; // release to match the previous alloc 

[myMutableArray removeObject:obj]; // obj receives a release message 

[myMutableArray release]; // all objects in array receives release message if it is not owned anywhere else 
+0

+1好回答:直接和簡單.... :) – Jhaliya 2011-04-15 07:35:47

0

如果你有這樣的事情:

MyObject *obj = [[MyObject alloc] init]; 
[myArray addObject:obj]; 
[obj release]; 

你可以說myArray成爲obj所有者。將一個對象添加到數組或字典時,它將被該數組或字典保留。由於您釋放它(放棄所有權),數組或字典具有唯一的保留引用,因此成爲所有者。在這個例子中,obj一旦myArray被取消分配(假設沒有人從數組中查詢並保留它),obj被取消分配。

相關問題