2009-07-11 4 views
1
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { 
    AViewController * aView = [[AViewController alloc] initWithNibName:@"myNib" bundle:[NSBundle mainBundle]];  
    return vintagePriceRowView.view; 
} 

Я знаю, что этот код нуждается в выпуске ... где-то. Но где? Если я установил выделенный AviewController в autorelease, то прикосновение к элементам в представлении приведет к «сообщению, отправленному на освобожденный экземпляр 0xfb5780»Размещение элементов в нижнем колонтитуле UITableView, когда их выпускать?

Инструмент «Утечки» фактически не показывает утечку, но, очевидно, Клану не нравится приведенный выше код. Я знаю, что Кланг - это не Евангелие, определяющее все, что может быть неправильным в вашем коде, но в этом случае чувствует себя, как будто это, вероятно, правильно. Я выделил его, мне нужно его освободить.

Любые идеи о том, что я делаю неправильно?

ответ

2

Для обеспечения эффективности вы должны создать представление, которое вы будете использовать в нижнем колонтитуле, прежде чем оно понадобится. Возможно, создайте его в viewDidLoad в вашем TableViewController и сохраните его в переменной-члене.

Затем в вашем режиме viewFooter просто верните представление, которое вы сохранили ранее.

Затем в вашем методе dealloc tableViewController отпустите представление.

1

Вам нужно удержать его, пока он больше не понадобится.

Я предлагаю сделать частную собственность, установить ее на nil изначально, а затем lazy загрузить nib и присвоить возвращенный вид собственности. Затем в dealloc или в viewDidUnload просто установите его на nil через сеттер.

После того, как вы назначили его частной собственности, вам потребуется, конечно, release или autorelease, так как сеттер сохранит его для вас.

Смежные вопросы