我动态地将一个子视图添加到另一个uiview;
在子视图中,单击按钮返回,方法如下:
[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
查看是否立即添加为子视图,或者如果它是 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 的视图被卸载然后重新加载,就会发生这种情况。
你应该首先释放。“alloc”对应的是“release”,“addSubview”对应的是“removeFromSuperView”:保持平衡。
添加视图:
UIView *myView = [[UIView alloc] initWithFrame:myFrame];
[myParentView addSubview:myView];
[myView release];
删除视图(removeFromSuperView 后视图将在内存中清除):
[myView removeFromSuperView];
看起来您正在将保留视图添加为子视图。它的父视图再次保留它。因此,当您单元格时,[self removeFromSuperView];
它会从 superView 获取发布消息,但仍必须由创建者发布。