我动态地将子视图添加到另一个uiview;self removeFromSuperView不释放自我?
在子视图,单击一个按钮通过下面的方法来回去:
[self removeFromSuperView ];
但经过曼尼次添加子视图,并删除它,我的应用程序可能会崩溃,日志说,被杀害了。
我发现拨打[self removeFromSuperView]
没有释放自我。那么释放它的最好方法是什么?
我动态地将子视图添加到另一个uiview;self removeFromSuperView不释放自我?
在子视图,单击一个按钮通过下面的方法来回去:
[self removeFromSuperView ];
但经过曼尼次添加子视图,并删除它,我的应用程序可能会崩溃,日志说,被杀害了。
我发现拨打[self removeFromSuperView]
没有释放自我。那么释放它的最好方法是什么?
如果您在创建时保留UIView(或将其添加到数组中),则保留计数将增加。例如:
// Retain count is 1
UIView *myView = [[UIView alloc] initWithFrame:myFrame];
// Retain count is 2
[myParentView addSubview:myView];
// Retain count is 1 again
[myView removeFromSuperView];
在上面的例子中,你可以autorelease
视图如果立即添加作为一个子视图或释放它在你的dealloc如果它是伊娃。
编辑:(其他原因,你的观点可以保留)
// Retain count +1
[myArray addObject:myView];
// Retained in the setter created by the @synthesize directive
@property(nonatomic, retain) UIView *myView;
中还有其他属性保留在文件中,指出。
如果确实要释放它们,您还应该小心在VC的loadView方法中创建对象,因为它们将在调用loadView时再次创建。如果您的VC视图已卸载然后重新加载,则会发生这种情况。
我添加子视图是这样的: UIView * myView = [[UIView alloc] initWithFrame:myFrame]; [myParentView addSubview:myView];并且在add.because之后不会释放,当我调用[self removeFromSuperView]时,应用程序有时会崩溃; – 2012-07-14 08:07:16
嗨xxhp,应用程序将崩溃,如果你创建它(保留1),addSubview(保留2),释放视图(保留1),从超视图中删除(版本0,查看dealloc'd)。 addSubview(崩溃)。听起来就像你需要使用一个iVar并创建你的视图,并在你的VC的dealloc中释放它,如果你想让它坚持下去,所以你可以添加和删除superView。如果是这种情况,那么视图不会被解除分配,直到你的VC也被解除分配。同样,你可以在loadView中创建它,并在viewDidUnload中释放它。希望这有助于,戴夫 – 2012-07-14 09:41:30
谢谢。我会试试这个。 – 2012-07-15 01:17:16
看起来像是将保留视图添加为子视图。其父母的观点再次保留下来。 所以当你的单元[self removeFromSuperView];
它从superView获得释放消息,但仍然必须由创建者释放。
你应该首先发布。 “alloc”的对应部分是“释放”,“addSubview”的对应部分是“removeFromSuperView”:保持这些平衡。
add视图:
UIView *myView = [[UIView alloc] initWithFrame:myFrame];
[myParentView addSubview:myView];
[myView release];
移除View(视图将在存储器removeFromSuperView后清理):
[myView removeFromSuperView];
我试过这个,但是app有时会崩溃! – 2012-07-14 08:13:31
后它增加了子视图到parentview的代码。 – Apurv 2012-07-13 05:49:22
发布一些代码,所以我们可以理解 – Hiren 2012-07-13 06:14:38