Существует два типа NSOutlineView. Один из них основан на представлении (более гибкий для использования), а другой - на основе ячеек. Предполагая, что youre использует основанную на представлении, NSTableCellViews
в виде схемы не будет освобожден, когда вы свернете элемент. Ячейки просто выходят из очереди, то есть удаляются с экрана, который будет использоваться позже.
Это сделано для соображений эффективности использования памяти. Логика: «зачем выделять let say 2000+ cellViews, если экран способен отображать только 20 за раз?» Таким образом, ячейки получат очереди (будут использоваться позже) и не будут освобождены обычно.
ОДНАКО, это поведение непредсказуемо. Если вы настроите свой код стандартным образом, система будет управлять ячейками. Вы не можете быть на 100% уверены, когда ячейка будет освобождена. Если ваши пользователи могут удалять ячейки из NSOutlineView, тогда увеличивается вероятность освобождения ячеек.
-Edit-
Основываясь на комментариях ниже, вам нужно сбросить клетки после того, как их извлечение из. Предполагая, что ваш код выглядит примерно так.
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
NSTableCellView *aCellView = [outlineView makeViewWithIdentifier:[tableColumn identifier] owner:self];
// You can reset the cell like so
if (item.status == 0) { // Assuming your item has a property called status (you can make what ever property you want)
aCellView.imageView.image = [NSImage imageNamed:@"redImage"];
} else if (item.status == 1) {
aCellView.imageView.image = [NSImage imageNamed:@"blueImage"];
} else {
aCellView.imageView.image = nil;
}
}
Так в основном, вы наблюдаете свойство элемента (свойства следует объявить различать, какой элемент является то, что) и в зависимости от свойств, вы сбрасываете ячейку, чтобы показать правильные значения. В приведенном выше примере ячейка имеет статус изображения 0 = красное изображение, 1 = синее изображение, все остальное = нет изображения. Если бы я не сбросил ячейки, когда когда-либо я рухнул, некоторые ячейки будут иметь старые значения других ячеек, поскольку они повторно используются.
Извините, только что отредактировал вопрос ... это точка зрения одна –