假设您有几个Class对象声明并将其添加到NSMutableArray中,那么您可以修改Class对象和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"];
}
我想我通常会在将item1和item2添加到itemHolder后释放它,但它不会破坏内存管理规则吗?因为在dealloc的最后,你仍然可以发布所有内容
-(void)dealloc{
[item1 release];
[item2 release];
[itemHolder release];
}
答案 0 :(得分:1)
将对象(item1和item2)添加到数组时,数组只是存储指针。对象本身不会被复制。
因此,当您在NSArray中的第一个项目上对item1或setVarName设置VLAN名称时,这两个操作都会影响完全相同的对象(同一个实例)
对于内存管理,当您将项目添加到NSArray时,NSArray(可变或不可变)将保留每个项目。当数组被释放时,它将释放它们中的每一个。
如果您还有其他需要单独保留每个项目,那么您应该这样做(就像在您的示例中一样)。但请记住,在正常的程序中,您经常只是将新对象添加到数组中并立即释放它们,因为数组已保留它们。
但同样,如果不看一个具体的例子,很难概括。
答案 1 :(得分:0)
如果您尝试发布已发布的内容,则可能会出现EXC_BAD_ACCESS或分段错误。尽量确保不要两次释放同一个对象。
如果释放数组中包含的对象并稍后释放item1或item2,则将从两个不同的引用中释放相同的对象
如果更改了类对象,那么数组中的版本也会受到影响,反之亦然。