私はいくつかのメモリ リーク プロファイリングを行っていましたが、テーブルビュー セル 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;
}