代码之家  ›  专栏  ›  技术社区  ›  Pablo

为什么这个NIB视图在返回之前没有被释放?

  •  2
  • Pablo  · 技术社区  · 14 年前
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
    if (cell == nil) 
        {
        [[NSBundle mainBundle] loadNibNamed:@"ThemeCell" owner:self options:nil];
            cell = self.themeCell;
            self.themeCell = nil;
    }
    ...
    return cell;
    

    我的理解是 self.themeCell = nil; cell = self.themeCell

    2 回复  |  直到 14 年前
        1
  •  2
  •   Felixyz    14 年前

    nib加载过程稍微(但不是很)复杂,并且在OSX和iPhone平台之间有所不同。你可以在 the Nib Object Life Cycle 资源编程指南的一节。在表1-1中,您会发现:

    保留计数为1,然后 但是,对象层次结构 重新建立 方法,该方法使用 setter方法或通过 如果未指定setter方法,则为默认值 可获得的

    nil retain计数下降到1,单元格返回到表视图。表视图将它添加到其视图层次结构中,从而保留它(也可能在其逻辑的其他部分保留它)。在这一切之后 autorelease 水池已排干。

    房产正在自动归还旧房 值而不是释放,这是 案子?

    不,合成设置器会立即释放对象(尽管有些框架类可能会保留对象更长的时间,例如,如果它是一个需要设置动画的视图的话。)

        2
  •  0
  •   John Franklin    14 年前

    AFAIK,综合性能用途 release ,不是 autorelease

    loadNibNamed:owner:options: 调用对仍挂起的对象设置自动释放。放 NSLog(@"Retain Count: %d", [cell retainCount]); 比赛前后 self.themeCell=nil;