代码之家  ›  专栏  ›  技术社区  ›  Dan Ray

添加子视图,然后释放它:“修改正在完成的视图”

  •  3
  • Dan Ray  · 技术社区  · 14 年前

    我有一个叫做TagButton的uiButton和一个叫做TagsView的uiScrollView。

    在我的内心 -(void)renderTags 方法,我做

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

    …为了清理甲板,我走过一对叫做 allTags activeTags ,或者为用户在应用程序中使用过的每个标签创建“LIT”和“UNLIT”按钮。到现在为止,一直都还不错。但是当我将新创建的ui按钮添加到我的视图中时,会发现:

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

    …第一次,在视图上什么都没有发生,标签按钮没有出现。第二次我把同样的绳子放进去 -toggleTag 而不是 -createTag ,但结果是相同的渲染方法),我得到了控制台消息 modifying layer that is being finalized = 0x82b3ec0 .

    如果我发表评论 [tagButton release] 不过,一切正常。那么,什么给予?我认为在超级视图中添加一个子视图可以使超级视图保留它。我不会再处理这个按钮了,除非下次我呈现标签列表时告诉它删除自己,所以看起来视图控制器应该释放它。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Daniel    14 年前

    你的问题可能是你一开始就没有保留tagbutton,因此没有必要释放它……希望能有所帮助。