【问题标题】:Adding subview then releasing it: "modifying view that is being finalized"添加子视图然后释放它:“修改正在完成的视图”
【发布时间】:2011-03-13 21:11:17
【问题描述】:

我有一个名为 tagButton 的 UIButton 和一个名为 tagsView 的 UIScrollView。

在我的 -(void)renderTags 方法中,我这样做了

[[self.tagsView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

...为了清理牌组,然后我遍历一对名为 allTagsactiveTags 的数组,为用户在应用程序中使用过的每个标签交替创建“点亮”和“熄灭”按钮。到目前为止,一切都很好。但是当我将新创建的 UIButton 添加到我的视图中时,因此:

[self.tagsView addSubview:tagButton];
[tagButton release];

...第一次,视图上没有任何反应,标签按钮不显示。我第二次放入相同的字符串(触发-toggleTag 而不是-createTag,但最终以相同的渲染方法结束),我收到控制台消息modifying layer that is being finalized = 0x82b3ec0

不过,如果我注释掉 [tagButton release],一切正常。那么,什么给了?我认为向超级视图添加子视图会使超级视图保留它。我不会再处理这个按钮,只是告诉它在下次渲染我的标签列表时自行移除,所以看起来视图控制器应该释放它。

【问题讨论】:

  • 你在哪里定义tagButton?如果你一开始就没有保留它,那么不需要释放它
  • 你确定 tagsView 不是 nil 吗?
  • @Daniel。哦。而已。我用[UIButton buttonWith...] 方便的方法得到它,所以它已经自动发布了。请您说一下作为答案,以便我接受吗?
  • 已回答...该死的 15 个字符

标签: iphone memory-management uiview


【解决方案1】:

您的问题可能是您一开始没有保留 tagButton,因此无需释放它...希望有所帮助

【讨论】:

  • 谢谢。全职 iPhone 开发三个月,我仍然不能免于新手错误......
  • 三个月没那么长:)
  • 您的回答也对我有所帮助。谢谢。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多