代码之家  ›  专栏  ›  技术社区  ›  Jonathan.

objective-c addSubView保留计数

  •  0
  • Jonathan.  · 技术社区  · 14 年前

    我的印象是,向视图中添加子视图的方式如下:

    UITableViewController *sitesel = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];
    sitesel.view.frame = CGRectMake(0,0,100,100);
    [self.left addSubview:sitesel.view];
    [sitesel release];
    

    但似乎我不应该释放sitesel(控制器)?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Max Seelemann    14 年前

    addSubview

    你不应该发布视图,因为那不关你的事。不是你创造的,不是你碰的。别管它。

    @property(retain) UITableViewController *siteController; self.siteController = sitesel; 在释放控制器之前。这样一切都会留在记忆里。

    PS:为了保持清洁,您可能应该在sitesel的访问器中更改视图。只是为了确保它总是随着控制器来来去去。只需设置控制器,您的方法就会变得更短。

    补充: 该setter可能看起来像这样,只需要设置控制器和透明更新的视图:

    - (void)setSiteselController:(UITableViewController *)ctrl {
      if (_sitesel)
        [_sitesel.view removeFromSuperview];
    
      [_sitesel autorelease];
      _sitesel = [ctrl retain];
    
      if (_sitesel) {
        _sitesel.view.frame = CGRectMake(0,0,100,100);
        [self.left addSubview: _sitesel.view];
      }
    }
    

    UITableViewController *sitesel = [[UITableViewController alloc] initWithStyle: UITableViewStyleGrouped];
    self.siteselController = sitesel;
    [sitesel release];
    

    PPS:你不知道 需要