Должен ли я сохранить возвращенный вид из makeViewWithIdentifier:owner:?

Что из следующего является правильным?

NSTableCellView *cell = [outlineView makeViewWithIdentifier: [tableColumn identifier] owner: self];
// Do stuff…
return cell;

или же

NSTableCellView *cell = [[outlineView makeViewWithIdentifier: [tableColumn identifier] owner: self] retain];
// Do stuff…
return cell;

Я запутался, потому что makeView… Метод возвращает автоматически выпущенное представление, и ячейки табличного представления не могут быть освобождены, пока табличное представление все еще там. Сохраняет ли табличное представление саму ячейку?

Спасибо большое!

1 ответ

Решение

Поскольку вы не указываете, я предполагаю, что этот код из вашей реализации ‑tableView:viewForTableColumn:row: метод делегата NSTableView,

Если это так, то не имеет значения, что табличное представление делает с ячейкой, потому что владение ячейкой не ваша проблема. Ваша обязанность состоит в том, чтобы соответствовать правилам управления памятью, как подразумевается сигнатурой метода, и в этом случае метод делегата возвращает автоматически освобожденный объект, потому что он не содержит слов new или же copy, Таким образом, вам нужно вернуть автоматически освобожденный объект. В вашем случае это cell пример.

Другие вопросы по тегам