2011-05-25 49 views
0

初学者的问题:我想有它添加到视图后删除子视图,然后将其释放,即我有:如何删除其发布的子视图

for (int i = 0; i < 9, i++) { 
     UIButton *btn = [indexButtons objectAtIndex:i]; 
    btn.tag = x; 
    [notePage1 addSubview:btn]; 
    [btn release]; 

} 

我怎样才能摆脱这些btn之一,例如数字0?我想到了

UIButton *btn = [indexButtons objectAtIndex:0]; 
if ([btn isDescendantOfView:notePage1]) { [btn removeFromSuperview]; } 
[btn release]; 

但是,这只会导致应用程序崩溃。我根本没有错误日志? - 应用程序只是终止。我如何正确地做到这一点?

回答

1

你不应该释放任何这些片段中的按钮。如果您专门使用了retain,alloc,copynew,则只能使用release

你的代码应该是:

for (int i = 0; i < 9, i++) { 
     UIButton *btn = [indexButtons objectAtIndex:i]; 
    btn.tag = x; 
    [notePage1 addSubview:btn]; 
} 

UIButton *btn = [indexButtons objectAtIndex:0]; 
if ([btn isDescendantOfView:notePage1]) { [btn removeFromSuperview]; } 

添加到一个到上海华自动增加保留计数和自动清除版本。你不必担心它。

+0

谢谢!哦,亲爱的,我应该知道这一点...感谢提醒我 - 希望我会记得这一次! – 2011-05-25 15:07:35

3

你不应该释放按钮,因为你没有分配它。

这是关于对象所有权。你永远不应该释放你不拥有的对象。你可以把一个对象的所有权通过发送以下信息之一:

  • 页头
  • 保留
  • 复制
+0

谢谢!但除此之外,这将是解决这个问题的方法,对吧?还是有更优雅的方式? – 2011-05-25 14:22:23

+0

没关系,只要你不释放你没有分配的对象 – 2011-05-25 14:23:10

+0

“你也没有复制或保留它”也应该在答案中完成。 – 2011-05-25 14:26:42

1

不释放按钮,你永远的Alloc”编辑他们