Помещение элементов в нижний колонтитул UITableView, когда их освобождать? - PullRequest
1 голос
/ 11 июля 2009
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    AViewController * aView = [[AViewController alloc] initWithNibName:@"myNib" bundle:[NSBundle mainBundle]];    
    return vintagePriceRowView.view;
}

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

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

Есть идеи, что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 11 июля 2009

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

Тогда в вашем методе viewForFooter просто верните представление, которое вы сохранили ранее.

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

1 голос
/ 11 июля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...