在removeFromSuperview之后删除/释放UIView的合适方法



我在iOS应用中尝试绘画。我有一个类,它是UIView的子类,它可以画一些线之类的东西。当用户按下按钮时,我实例化类并在应用程序的主UIViewController的视图上执行addSubView。用户按下该按钮的次数越多,该类的实例就越多。它工作得很好。

现在我想为用户提供一种删除其中一个视图的方法。到目前为止,我已经将[self removeViewFromSuperview]放入自定义UIView的touchesBegan方法中。当用户按下绘图时它会从视图中移除。但是,它实际上并没有被删除,对吧?由于视图是在按下按钮时执行的方法中实例化的,因此我无法从UIViewController中引用它。什么是适当的方式,以确保我没有浪费内存与UIView的创建和删除?

在一个相关的注意事项上,如果我把切换开关在主窗口的UIView切换删除,我怎么能检查从touchesBegan内,如果切换开关设置为delete=yes?我是否会在AppDelegate中有某种布尔变量,我可以从UIView子类内检查?我该怎么说呢?

谢谢你的帮助,
有状态的

如果像这样添加视图:

UIView *viewBeingAdded = [[[UIView alloc] init] autorelease];
[view addSubview:viewBeingAdded];

你可以删除它而不泄漏内存:

[theViewAboutToBeRemoved removeFromSuperview];

关于UISwitch,您不需要在任何地方保留其值,除非您需要它用于其他用途。你可以直接访问它的值:

if ([theSwitch isOn]) { ... }

你甚至不需要一个IBOutlet,你可以访问交换机的标签:

UISwitch *theSwitch = (UISwitch *)[view viewWithTag:<# switch tag number #>];
if ([theSwitch isOn]) { ... }

在这种情况下,您必须在Interface Builder中或在创建交换机时为交换机设置唯一的标记号。

当你执行[mainView addSubView:myView]时,mainView将保留myView。如果你用alloc/init创建了myView,那么你也保留了它。如果你在添加myView到主视图后不需要它,那么在添加它后只需执行[myView release]。当你从主视图中移除它时,它将被释放和释放。

如果您使用alloc/init创建UIView,将其添加到父视图中,然后释放视图,父视图将保留它。当它被removeViewFromSuperview删除时,它将被dealloc'ed

我通常在添加视图后自动释放视图,使父视图成为唯一的引用。

至于检查toggle,你可以添加一个IBOutlet,这样你就可以直接检查它。(这可能不是纯粹的MVC,但我不知道如果把它放在[UIApplication sharedApplication].delegate是必要的干净)

最新更新