我正在制作一个应用程序,其中有
MyViewController1
MyViewController2 + 9 UIView(MyView1,MyView2,MyView3,MyView4,MyView5,MyView6,MyView7,MyView8,MyView9)。
然后根据我的要求管理隐藏和显示每个视图 因为最初不需要所有视图,按钮点击需要它们......
所以我所做的是 - >
步骤1)在myViewController2.xib中添加了每个视图(视图未添加到viewController2的视图中..它们不是viewController2的子视图)
步骤2)IBOutlet UIView * myView(1..9);在MyViewController2.h中
步骤3)属性(非原子,保留)MyViewController2.h中的UIView * myView(1..9)
步骤4)在MyViewController2.m中合成myView(1..9)
viewDidLoad(){
myView1.frame = CGRectMake(x, y, y, y)//any Value
[self.view addSubView:myView1]; //added as child to this view
//I did for all the view
}
步骤5)现在应用alpha = 0/1,转换,根据要求的任何其他属性..
一切都很好......
但是现在我的应用程序占用了太多内存,无论何时正在加载此页面......
所以现在解决方案我想
仅在需要时为每个UIView分配内存,即单击按钮和 当不需要时,取消分配该视图的内存。
如何使用IB创建我的所有9个视图,以便如何在运行时从界面构建器加载视图???
如果有......请建议任何其他解决方案......
提前致谢...
答案 0 :(得分:0)
因此,只要您想要显示视图,请初始化并显示该视图。还为该视图设置标记。如果要显示另一个视图,请从超级视图中删除上一个视图,并将新视图添加为子视图。
[myView1 removeFromSuperview];
myView2.frame = CGRectMake(...);
[self.view addSubview: myView2];
答案 1 :(得分:0)
如果在IB中创建了视图,则无法在运行时添加视图。在调用viewDidLoad
之前,在IB中创建的所有对象都是alloc / inited。如果您想要在运行时创建视图,则必须以编程方式创建它,而不是在IB中创建。 (如果你选择走这条路线,Aadhira的建议会很好。但是,你必须确保你没有在IB中创建视图。而且,视图不能保留属性。否则,从superview中删除它们不会释放它们。)
然而,这可能没有必要。只要您没有在视图中放置任何内容(例如图像),它们就不会占用太多内存。您可以在IB中创建视图,但可以根据需要以编程方式向其添加内容,并在不再需要时以编程方式发布该内容。