1

私はいくつかのメモリ リーク プロファイリングを行っていましたが、テーブルビュー セル contentView に追加している customView が構築されており、決して破棄されていないことに気付きました。私はそれらを正しく扱っていると確信しています。

テーブルには 5 つのセルしかありませんが、この関数が呼び出されると、contentView にサブビューがないセルがデキューされることがあります。

私はこれがどのように起こるのか理解できませんか?contentView が実際に破棄されることはなく、何らかの形でセルから削除されただけです。

ここで何が起こっているのか誰でも説明できますか?

以下に関数を投稿しました。

ありがとうスチュワート

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString* const CELL_IDENTIFIER = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_IDENTIFIER forIndexPath:indexPath];

    BRAContentView *contentView = nil;
    for ( UIView *subView in cell.contentView.subviews )
    {
        if ( [subView isKindOfClass:[BRAContentView class]] )
        {
            contentView = (BRAContentView*)subView;
            break;
        }
    }


    if ( !contentView )
    {
        contentView = [BRAContentView content];
        [cell.contentView addSubview:contentView];
        [contentView setTranslatesAutoresizingMaskIntoConstraints:NO];

        NSDictionary *viewDict = [NSDictionary dictionaryWithObject:contentView forKey:@"contentView"];

        NSArray *constraintsArray = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[contentView]-0-|" options:0 metrics:nil views:viewDict];
        constraintsArray = [constraintsArray arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[contentView]-0-|" options:0 metrics:nil views:viewDict]];

        [cell.contentView addConstraints:constraintsArray];
    }

    contentView.delegate = self;
    // customise contentView here

    return cell;
}
4

0 に答える 0