Ios 从SuperView中删除/释放UIView的适当方式
我正在玩iOS应用程序中的绘图。我有一个类,它是Ios 从SuperView中删除/释放UIView的适当方式,ios,cocoa-touch,Ios,Cocoa Touch,我正在玩iOS应用程序中的绘图。我有一个类,它是UIView的一个子类,它画了一些线条和东西。当用户按下按钮时,我实例化该类并在应用程序的主UIViewController视图上执行addSubView。用户按下该按钮的次数越多,该类的实例就越多地添加到视图中。它工作得很好 现在,我想为用户提供一种删除其中一个视图的方法。到目前为止,我已经将一个[self-removeViewFromSuperview]放入自定义UIView的touchesbeated方法中。因此,当用户按下图形时,它将从视图
UIView
的一个子类,它画了一些线条和东西。当用户按下按钮时,我实例化该类并在应用程序的主UIViewController
视图上执行addSubView
。用户按下该按钮的次数越多,该类的实例就越多地添加到视图中。它工作得很好
现在,我想为用户提供一种删除其中一个视图的方法。到目前为止,我已经将一个[self-removeViewFromSuperview]
放入自定义UIView
的touchesbeated方法中。因此,当用户按下图形时,它将从视图中删除。但是,它实际上并没有被删除,对吗?由于视图是在按下按钮时执行的方法中实例化的,因此我无法从UIViewController
中引用它。有什么合适的方法可以确保我不会因为创建和删除的UIView
而浪费内存
另一方面,如果我要在主窗口的UIView
上设置切换开关来切换删除,那么如果该切换开关设置为delete=yes,我如何从touchsbegind中进行检查?在AppDelegate
中是否有某种布尔变量,我可以从UIView
子类中进行检查?我该如何引用它
谢谢你的帮助,有状态执行[mainView添加子视图:myView]时,mainView将保留myView。如果您使用alloc/init创建了myView,那么您也保留了它。如果在将myView添加到主视图后不需要它,只需在添加后执行[myView release]。当您从主视图中删除它时,它将被释放和解除分配。当您执行[mainView添加子视图:myView]时,mainView将保留myView。如果您使用alloc/init创建了myView,那么您也保留了它。如果在将myView添加到主视图后不需要它,只需在添加后执行[myView release]。当您从主视图中删除它时,它将被释放和解除分配。如果您使用
alloc/init
创建UIView
,将其添加到superview中,然后释放视图,superview将保留它。当使用removeViewFromSuperview
删除它时,它将被解除锁定。如果使用alloc/init
创建UIView
,将其添加到superview,然后释放该视图,superview将保留它。当使用removeViewFromSuperview
删除它时,它将被解除锁定。我通常在添加视图后自动删除视图,将父视图保留为唯一的引用
至于检查切换,您可以添加一个IBOutlet,以便直接检查它。(这可能不是纯MVC,但我不知道是否将其放在[UIApplication sharedApplication]中。委托必然更干净。)我通常在添加视图后自动释放视图,将父视图作为唯一的引用
至于检查切换,您可以添加一个IBOutlet,以便直接检查它。(这可能不是纯MVC,但我不知道是否将其放在[UIApplication sharedApplication]中。委托必须更干净。)如果您像这样添加视图:
UIView *viewBeingAdded = [[[UIView alloc] init] autorelease];
[view addSubview:viewBeingAdded];
您可以在不泄漏内存的情况下删除它:
[theViewAboutToBeRemoved removeFromSuperview];
关于ui开关
,您不需要将其值保留在任何地方,除非您需要它用于其他用途。您可以直接访问其值:
if ([theSwitch isOn]) { ... }
您甚至不需要IBOutlet
,您可以使用其标签访问交换机:
UISwitch *theSwitch = (UISwitch *)[view viewWithTag:<# switch tag number #>];
if ([theSwitch isOn]) { ... }
UISwitch*theSwitch=(UISwitch*)[查看带标记的视图:];
如果([开关]{…}
在这种情况下,您必须在Interface Builder中或在创建交换机时为其设置唯一的标记号。如果您像这样添加视图:
UIView *viewBeingAdded = [[[UIView alloc] init] autorelease];
[view addSubview:viewBeingAdded];
您可以在不泄漏内存的情况下删除它:
[theViewAboutToBeRemoved removeFromSuperview];
关于ui开关
,您不需要将其值保留在任何地方,除非您需要它用于其他用途。您可以直接访问其值:
if ([theSwitch isOn]) { ... }
您甚至不需要IBOutlet
,您可以使用其标签访问交换机:
UISwitch *theSwitch = (UISwitch *)[view viewWithTag:<# switch tag number #>];
if ([theSwitch isOn]) { ... }
UISwitch*theSwitch=(UISwitch*)[查看带标记的视图:];
如果([开关]{…}
在这种情况下,您必须在Interface Builder中或在创建交换机时为其设置唯一的标记号。如何创建UIView?如何创建UIView?