cfi*_*her 0 cocoa cocoa-touch memory-management objective-c uiview
如果我在运行时创建一个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;
}
Run Code Online (Sandbox Code Playgroud)
[UIButton buttonWithType:UIButtonTypeRoundedRect]
给你一个已经自动释放的对象.这意味着您不"拥有"该对象,因此您没有责任释放它.
如果你保留它,那么你会明确地说你想为自己保留这个对象,这意味着你将负责释放它.
在UIView
将保留它的子视图,所以它的UIView
的释放他们的责任.UIView
当自身被解除分类时,或者从超级视图中删除子视图时,它将释放它的子视图.
基本上,如果你没有alloc/init
,new
,copy
或retain
一个对象,那么它是不是你的目标,你是不是负责释放它.您不必担心它,无论拥有该对象的对象(在您的情况下UIView
)都将在它完成时释放它.