我动态地将一个子视图添加到另一个uiview;
在子视图中,单击按钮可通过以下方式返回:
[self removeFromSuperView ];但在manny times添加子视图并将其删除后,我的应用程序可能会崩溃,日志显示它已被终止。
我发现调用[self removeFromSuperView]并不能释放self。那么发布它的最好方法是什么呢?
发布于 2012-07-13 14:17:48
如果您在创建时保留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,则可以在取消分配时将其释放。
EDIT:(保留视图的其他原因)
// Retain count +1
[myArray addObject:myView];
// Retained in the setter created by the @synthesize directive
@property(nonatomic, retain) UIView *myView;文档中声明属性已保留的任何其他内容。
在VC的loadView方法中创建对象时也要小心,如果确实释放了这些对象,因为调用loadView时会再次创建这些对象。如果你的VC的视图被卸载然后重新加载,就会发生这种情况。
发布于 2012-07-13 16:10:29
你应该首先释放。"alloc“的对应物是"release","addSubview”的对应物是“removeFromSuperView”:保持这些平衡。
添加视图:
UIView *myView = [[UIView alloc] initWithFrame:myFrame];
[myParentView addSubview:myView];
[myView release];删除视图(视图将在removeFromSuperView后在内存中清除):
[myView removeFromSuperView];发布于 2012-07-13 14:06:29
看起来您正在将保留视图添加为子视图。它的父视图又一次保留了它。所以当你计算[self removeFromSuperView];时,它会收到来自superView的释放消息,但仍然需要由创建者释放。
https://stackoverflow.com/questions/11464634
复制相似问题