Objective c 目标C数组与对象释放
我有一个关于何时释放NSArray元素的新手问题。请参阅以下伪代码: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
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时,对象将被释放
从内存管理的角度来看,您的代码看起来是正确的