2010-12-06 44 views
0

假设您有几个Class对象声明并将其添加到NSMutableArray中,那么您可以修改Class对象和NSMutableArray对象。怎么了?当你添加一个类到NSMutableArray并且你改变了这个对象和数组时,会发生什么?

代码示例:

MyClass *item1; 
MyClass *item2; 
NSMutableArray *itemHolder; 

item1 = [[MyClass alloc] init]; 
item2 = [[MyClass alloc] init]; 
itemHolder = [[NSMutableArray alloc] initWithObjects:item1,item2,nil]; 

-(void)someFunction{ 
    [item1 setVarName:@"item1"]; 
    [item2 setVarName:@"item2"]; 
    for(MyClass *items in itemHolder) [items setVarName:@"item"]; 
} 

我觉得我平时释放物品1和ITEM2将它变成itemHolder之后,但它不会破坏内存管理规则吧?因为在dealloc中结束时,你仍然可以当你添加的对象(ITEM1和ITEM2)的数组,数组只是存储指针释放一切

-(void)dealloc{ 
    [item1 release]; 
    [item2 release]; 
    [itemHolder release]; 
} 

回答

1

。该对象本身不被复制。

所以,当你setVarName的物品1或setVarName上在NSArray中的第一个项目,两个动作都影响着完全相同的对象(同一实例)

至于内存MGMT,当您添加项目到NSArray的,NSArray(可变或不可变)将保留它们中的每一个。当数组被释放时,它将释放它们中的每一个。

如果您有其他需要单独保留每个项目,那么您应该这样做(如在您的示例中)。但是请记住,在正常的程序中,你更经常地将新对象添加到数组中,并在数组保留它们之后立即释放它们。

但是,如果不看一个具体的例子就很难一概而论。

+0

感谢您的回复。 – okysabeni 2010-12-07 18:55:25

0

如果您尝试发布已发布的内容,那么您可能会遇到EXC_BAD_ACCESS或段错误。尽量确保不要两次释放同一个对象。

如果松开数组中包含的和后来的对象释放ITEM1或ITEM2,你会被两次从两个不同的引用

释放同一个对象如果更改类对象则数组中的版本将是也受到影响,反之亦然。

相关问题