我在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是必要的干净)