【问题标题】:Allocate and deallocate Memory to UIView at run time在运行时为 UIView 分配和释放内存
【发布时间】:2011-11-14 08:13:02
【问题描述】:

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

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) 属性(nonatomic, retain) UIView *myView(1..9) in MyViewController2.h

步骤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 分配内存,即单击按钮和 当不需要时为该视图释放内存。

如何做到这一点,因为我的所有 9 个视图都是使用 IB 创建的,那么如何在运行时从界面生成器加载视图???

如果有的话,请提出任何其他解决方案...

提前谢谢...

【问题讨论】:

    标签: iphone memory-management uiview


    【解决方案1】:

    如果视图是在 IB 中创建的,则不能在运行时添加视图。在 IB 中创建的所有对象在调用 viewDidLoad 之前都已分配/初始化。如果您希望在运行时创建视图,则必须以编程方式创建它,而不是在 IB 中。 (如果您选择走这条路线,Aadhira 的建议会很好地工作。但是,您必须确保您没有在 IB 中创建视图。此外,视图不能保留属性。否则,将它们从超级视图中删除不会释放它们。)

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

    【讨论】:

      【解决方案2】:

      所以当你想要显示一个视图时,初始化它并显示它。还要为该视图设置一个标签。当您想显示另一个视图时,请从超级视图中删除以前的视图并添加一个新视图作为子视图。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-25
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        • 1970-01-01
        • 2021-04-21
        • 1970-01-01
        相关资源
        最近更新 更多