2011-09-01 99 views
0

NSMutableArray的addObject方法究竟如何工作?它是否會創建一個新實例並將其添加到數組中,還是隻是將對SAME對象的引用添加到數組中?關於NSMutableArray,指針和版本問題

如果答案是隻插入一個參考對象,那麼它導致了我的下一個問題:

比方說,我有以下方法(是NSMutableArray的「列表」)我的課之一,很高興,這個代碼工作我想要的方式,但我似乎就是不完全理解爲什麼:

-(void)buyItem:(Item *)anItem 
{ 
    Item * newItem = [[Item alloc]init]; 
    newItem.name = anItem.name; 
    newItem.details = anItem.details; 
    [list addObject:newItem]; 
    [newItem release]; 
} 

所以基本上打完電話後[名單ADDOBJECT:的newitem],就現在共有兩個參考指向的相同的對象權利(newItem,和'列表'數組中的另一個)?

但是,爲什麼在這裏釋放newItem對象,不會清除'list'中的那個NSMutableArray?他們不是指向同一個對象嗎?

回答

2

當您使用方法addObject:將對象添加到NSMutableArray時,它添加了retain s object。這就是爲什麼您可以稍後使用release並且之後通過使用objectAtIndex:方法訪問的方法。

+0

啊是的,我有點得到它!謝謝你的回答 – lucas32

1

它添加一個引用,然後增加對象保留計數一。你所做的是正確的,它仍然存在於數組中,保留數爲1。

供您參考。 What increases an object's retain count?

+0

我明白了!謝謝。現在要查看保留計數 – lucas32

0

理解releasedealloc之間的區別很重要。 release簡單地遞減「保留計數」,除了當計數遞減到零時,release繼續到dealloc對象。

一般情況下(除另有說明外),當您將對象引用(即指針)傳遞給Objective-C對象,並且在您調用該對象的持續時間之後它保留該引用的副本時,它retain作爲自己的對象,並且它在對象本身解除分配時,或者當引用的副本被取消或覆蓋時負責對象release