2011-09-14 54 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