【问题标题】:Loading and releasing UIView dynamically动态加载和释放 UIView
【发布时间】:2011-12-25 22:27:24
【问题描述】:

我想在点击按钮时动态加载视图。

假设视图是“MyView”

我把它声明为

IBOutlet UIView *myView;

并通过 myView.xib 制作的界面构建器连接它。

我没有为此视图设置属性和合成

现在我想要的是在单击按钮时为该视图分配内存

所以我尝试了我的 viewController 的按钮按下方法

(void) buttonPressed1{
   myView = myView = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0];
   myView.frame = CGRectMake(30, 40, 200, 200);
   [self.view addSubview:myView];
}

已成功加载。 :)

现在我想通过单击其他按钮访问此视图..

所以我写了

-(IBAction) buttonPressed2:(id)sender
{
    myView.alpha = 0;
    [myView release];   
}

所以当我运行它时 --- 它工作正常

在 buttonPressed 上,它会在其他点击时添加该视图,它会淡出并释放该视图。

但是现在当我再次点击按钮添加视图时,它会说

modifying layer that is being finalized - 0x6807b60

然后在单击按钮 2 时,它会崩溃...

基本上我的要求是仅在使用后将该视图保留在内存中,应该将其释放..

上面的方法是好的,或者还有其他方法可以做到这一点......

那个错误是什么意思????

!更多查询是

在上述情况下......

myView 的内存是在运行时通过单击按钮 ????.... 分配的

当我在 xcode 中通过仪器进行测试时,点击按钮时图表中没有显示分配...

所以请帮帮我...

请帮忙..

提前致谢

【问题讨论】:

    标签: iphone uiview memory-management


    【解决方案1】:

    当您释放视图时:[myView release]; 它不会从超级视图中删除。此外:你不应该释放它,因为它是作为自动释放对象创建的。

    解决方案可能是下一个:

    (void) buttonPressed1{
      if (myView)
      {
          [myView removeFromSuperview];
      }
      myView = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0];
      myView.frame = CGRectMake(30, 40, 200, 200);
      [self.view addSubview:myView];
    }
    -(IBAction) buttonPressed2:(id)sender
    {
        myView.alpha = 0;
        //[myView release];   
    }
    

    【讨论】:

    • 我猜,你想说从这个方法加载的视图是自动释放的对象??
    • 我想知道在上述情况下.... myView 的内存是在运行时通过单击按钮分配的????....就像我在 xcode 中通过仪器测试它时一样,点击按钮时图表中没有显示分配...所以请帮帮我...
    • "从这个方法加载的视图是自动释放的对象?"答案:“是”
    猜你喜欢
    • 2018-11-09
    • 1970-01-01
    • 2015-05-08
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多