动态加载和释放UIView

时间:2011-11-10 07:07:13

标签: iphone uiview memory-management

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

让我们说视图是'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];   
}

所以当我运行它时 - 它可以正常运行

on buttonPressed它将该视图添加到其他点击它淡出并释放该视图。

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

modifying layer that is being finalized - 0x6807b60

然后点击按钮2,它崩溃......

基本上我的要求是只有在使用它之后才将该视图保留在内存中,它应该被解除分配..

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

这个错误意味着什么????

!更多查询

以上情况......

在运行时点击按钮???? ....

分配内存到myView

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

所以请帮帮我......

请帮助..

提前致谢

1 个答案:

答案 0 :(得分: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];   
}