Objective c 目标C数组与对象释放

Objective c 目标C数组与对象释放,objective-c,arrays,memory-management,Objective C,Arrays,Memory Management,我有一个关于何时释放NSArray元素的新手问题。请参阅以下伪代码: NSMutalbeArray *2DArray = [[NSMutableArray alloc] initWithCapacity:10]; for (int i=0;i<10;i++) { NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:5]; for (int j=0;j<5;j++) { MyObject *o

我有一个关于何时释放NSArray元素的新手问题。请参阅以下伪代码:

NSMutalbeArray *2DArray = [[NSMutableArray alloc] initWithCapacity:10];
for (int i=0;i<10;i++) {
  NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:5];
  for (int j=0;j<5;j++) {
    MyObject *obj = [[MyObject alloc] init];
    [array addObject:obj];
    [obj release];
  }

  [2DArray addObject:array];
  [array release];
}
// use 2DArray to do something

[2DArray release]
NSMutableArray*2DArray=[[NSMutableArray alloc]initWithCapacity:10];

对于(int i=0;iNo),您不需要告诉每个对象是
release
d。当您将
release
方法发送到
NSArray
时,它会自动将
release
方法发送到第一个内部的每个项目


因此,在您的情况下,您将发送
[2DArray release]
。这会自动将
[array release]
发送到每一个其他阵列,该阵列将发送
[obj release]
到每个
数组中的每个对象

您不需要释放保留的对象。NSArray在添加时保留它们,在释放时释放它们。因此,如果您分配、添加到数组,然后释放,数组中的对象的保留计数将为1。一旦释放数组,对象将被释放,因此将被释放

创建对象时,其保留计数为1。每当将对象添加到数组时,其保留计数都会增加(在本例中为2)。添加到数组后,代码会释放对对象的控制,将其保留计数减少1(在本例中为1)。然后,当您释放数组时,它会对其中的所有对象调用release,将它们的保留计数降低1(在本例中为0)。当保留计数达到0时,对象将被释放

从内存管理的角度来看,您的代码看起来是正确的