在运行时为UIView分配和释放内存

时间:2011-11-14 08:13:02

标签: iphone memory-management uiview

我正在制作一个应用程序,其中有

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个视图,以便如何在运行时从界面构建器加载视图???

如果有......请建议任何其他解决方案......

提前致谢...

2 个答案:

答案 0 :(得分:0)

因此,只要您想要显示视图,请初始化并显示该视图。还为该视图设置标记。如果要显示另一个视图,请从超级视图中删除上一个视图,并将新视图添加为子视图。

[myView1 removeFromSuperview];
myView2.frame = CGRectMake(...);
[self.view addSubview: myView2];

答案 1 :(得分:0)

如果在IB中创建了视图,则无法在运行时添加视图。在调用viewDidLoad之前,在IB中创建的所有对象都是alloc / inited。如果您想要在运行时创建视图,则必须以编程方式创建它,而不是在IB中创建。 (如果你选择走这条路线,Aadhira的建议会很好。但是,你必须确保你没有在IB中创建视图。而且,视图不能保留属性。否则,从superview中删除它们不会释放它们。)

然而,这可能没有必要。只要您没有在视图中放置任何内容(例如图像),它们就不会占用太多内存。您可以在IB中创建视图,但可以根据需要以编程方式向其添加内容,并在不再需要时以编程方式发布该内容。