我想澄清一些事情:
当我以编程方式添加UIVIEW到另一个UIVIEW时。
即[theview addsubview:thechildview];
我需要释放子视图,因为视图会增加保留计数。
右?
所以基本上如果我有一个循环,我正在使用该循环初始化子视图并将子视图添加到视图中:
for(int i=0;i<10;i++){
UIView *child = [UIview alloc]init.....
[parent addSubview:child];
[child release];
}
我还需要释放孩子吗?那么这意味着子视图的保留计数仍为1吗?
事情就是每当我在加入孩子后调用释放后,孩子会在一段时间后被解除分配。
你们可以通过释放孩子后确认我做了正确的事吗?
感谢。
答案 0 :(得分:3)
你应该把它放到某处,正确。你可以坚持下去并在以后发布它,但是你有责任在某些时候这样做。
父视图将自行保留/释放其子级。因此,如果父视图被dealloc'ed,它将释放其子视图。
如果从超级视图中删除子视图,它也将被释放。
答案 1 :(得分:2)
我需要释放子视图,因为视图会增加保留计数。
右
错误。
如果您拥有它,并且已经完成使用,则需要释放theChildView。视图是否选择保留它完全无关紧要。
所以,如果我们看看你的循环
for(int i=0;i<10;i++){
UIView *child = [UIview alloc]init.....
[parent addSubview:child];
[child release];
}
代码是正确的,因为在循环块的开头你alloc
表示你拥有它的孩子,并且在循环结束时它将超出范围,这意味着你不再需要它所以你必须释放(或自动释放)它。
中间发生的事情是完全不相关的,你应该不假设任何关于另一个对象上的任何特定方法的内容(除了它遵守Memory Management Rules)。
我还需要释放孩子吗?那么这意味着子视图的保留计数仍为1吗?
你不能假设保留计数。如果将对象移交给其他对象,parent
可能会导致对象被多次保留。它可能会选择复制而不是保留它。如果它不需要保留引用它可能根本不保留它。
你们可以通过释放孩子后确认我做了正确的事吗?
不,你完成使用它后发布它是正确的。