我动态地将子视图添加到另一个uiview;
在子视图中,单击按钮以通过以下方法返回:
[self removeFromSuperView ];
但是在曼尼时代添加了子视图并将其删除后,我的应用程序可能会崩溃,日志表示它已被杀死。
我发现调用[self removeFromSuperView]
并没有释放自我。那么释放它的最佳方法是什么?
答案 0 :(得分:4)
如果您在创建时保留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];
在上面的示例中,如果视图立即添加为subView,则可以autorelease
视图,如果是iVar,则可以在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的视图被卸载然后重新加载,就会发生这种情况。
答案 1 :(得分:2)
添加视图:
UIView *myView = [[UIView alloc] initWithFrame:myFrame];
[myParentView addSubview:myView];
[myView release];
删除视图(removeFromSuperView后视图将在内存中清除):
[myView removeFromSuperView];
答案 2 :(得分:0)
您似乎将保留的视图添加为子视图。它的父视图再次保留了它。
因此,当您单元格[self removeFromSuperView];
时,它会从superView获取释放消息,但仍然必须由创建者释放。