如果我在运行时创建一个UIControl并将其添加到视图中(通过addSubview :),视图是否会释放它,或者我应该这样做?
这是一个示例代码:
-(IBAction) cloneMe: (id) sender{
if (!currentY) {
currentY = [sender frame].origin.y;
}
UIButton *clone = [UIButton buttonWithType:UIButtonTypeRoundedRect];
CGRect cloneFrame = [sender frame];
cloneFrame.origin.y += currentY + cloneFrame.size.height + 30;
clone.frame = cloneFrame;
[clone setTitle:@"I'm a clone" forState:UIControlStateNormal];
[[sender superview] addSubview:clone];
currentY = cloneFrame.origin.y + cloneFrame.size.height;
}
答案 0 :(得分:7)
[UIButton buttonWithType:UIButtonTypeRoundedRect]
为您提供已自动释放的对象。
这意味着你不“拥有”该对象,因此你没有责任释放它。
如果您保留它,那么您将明确表示您希望自己保留此对象,这意味着您将负责释放它。
UIView
会保留其子视图,因此发布它们是UIView
的责任。 UIView
将在其自身被取消分配时,或者从超级视图中删除子视图时释放它的子视图。
基本上,如果您没有alloc/init
,new
,copy
或retain
一个对象,那么它不是您的对象,您不负责释放它。您不必担心它,无论拥有该对象的对象(在您的情况下UIView
)将在完成它时释放它。
答案 1 :(得分:1)
当你addSubview:
接收者保留参数时,当你通过其中一种方法删除它时释放它。