2010-02-21 81 views
2

如果我聲明一個NSArrayalloc & retain在單句然後我應該釋放NSArray對象兩次(即[arrayObject release] 2次)?NSArray的釋放

回答

0

不,您必須爲每個alloc釋放對象並保留每個對象。如果你

NSArray* arrayObject; 
arrayObject = [[NSArray alloc] init]; 
arrayObject = [[NSArray alloc] init]; 
... 

那麼它只是錯誤代碼(你不能ALLOC對象1倍以上反正。)

+1

這聽起來更像是一個比沒有。 –

+0

@Peter:我不好,我在同一行*上用alloc和init讀*。我明天要刪除我的答案。 –

0

。後一項任務將覆蓋原來的一個,這會導致泄漏。既可以使用2個對象,並釋放它們中的每一次

NSArray* arrayObject1, arrayObject2; 
arrayObject1 = [[NSArray alloc] init]; 
arrayObject2 = [[NSArray alloc] init]; 
... 
[arrayObject1 release]; 
[arrayObject2 release]; 

或另一個初始化之前釋放該對象

NSArray* arrayObject; 
arrayObject = [[NSArray alloc] init]; 
... 
[arrayObject release]; 
arrayObject = [[NSArray alloc] init]; 
... 
[arrayObject release]; 
7

如果要創建一個NSArrayalloc並在同一線路retain那麼你可能做錯了什麼。

對象編號爲alloc,保留計數爲+1,因此無需再調用retain

直接回答你的問題;是的,你不得不release它兩次。一次因爲你創建了這個對象,一次因爲你編輯了它。但是我會質疑爲什麼你需要首先保留一段時間。