2011-09-14 91 views
1

我有這個classA,它有一個方法,這是從另一個classB調用來獲取一個精靈的座標。返回NSArray並釋放它

當我在classA中調用該方法時,它返回NSMutablearray,但然後我想釋放該數組。 所以如果我釋放classA,那好嗎?所有分配的數組都在釋放D? NO .. 或者我應該釋放被調用classA的dealloc中的數組?

gameHandler.m 
-(NSMutableArray*)stand2_Co 
{ 
... 
return myArray 
} 

,然後從另一個類調用它:

theLevel=[[gameHandler alloc] init]; 
.. 
.. 
int theNumber = [ [ [theLevel stand2_Co] objectAtIndex:0] integerValue]; 

[theLevel release]; 

如果我釋放gameHandler,我也需要釋放數組? 如果是這樣,我應該什麼時候這樣做?

非常感謝。

+0

在'stand2_Co'你應該創建自動釋放'myArray'並返回。 – beryllium

回答

0
  • 您自己創建的任何對象

您可以使用其名稱以「黃金」, 「新」,「複製」,或「mutableCopy」(一種方法創建一個對象例如,alloc,newObject,或者可變拷貝(012abled)。

  • 當你不再需要它,你必須放棄一個 對象的所有權您擁有

您可以通過發送一個釋放消息 或自動釋放消息放棄對象的所有權。在Cocoa術語中,放棄對象的所有權因此通常被稱爲「釋放」對象的 。

  • 你一定不會放棄對象的所有權,你沒有自己的先前的策略規則

這只是推論,說 明確。

Memory Management Programming Guide

1

我建議您運行分析工具和內存泄漏測試程序來驗證沒有任何內容泄漏。我建議你在ClassA中特別發佈thEdit數組。任何分配的資源也應該由調用者或分配者來釋放。

1

您應該release您的班級的所有對象都是retainedallocated

如果您正在使用其他班級的某些對象,您應該確保他們在該班級工作期間仍然活着。

+0

Thnaks。我的問題是,當我分配classA並從另一個classB調用它的方法時,我不能在classA中釋放它,因爲classA中的方法在返回值後退出,所以我沒有地方放置發佈行,if我把它放在返回之後,它不會被完成,如果我把它放在返回的位置,它會釋放數組而不會返回到classB! ... – Curnelious

+0

然後你應該只返回自動釋放對象:'return [object autorelease];' – Nekto