setContent NSCollectionView: управление памятью

У меня есть NSCollectionView, который я заполняю с помощью [collectionView setContent:data];, где data — это NSArray, заполненный объектами одного и того же пользовательского подкласса NSObject. Прототипом элемента представления коллекции является стандартный NSCollectionViewItem, а не подкласс. Представление элемента коллекции заполняется с помощью привязок из моего подкласса NSObject.

Теперь о проблеме: при анализе моего приложения с помощью heapshots я вижу, что при открытии окна с представлением коллекции происходит огромный прирост памяти. Instruments указывает на это увеличение памяти до линии [collectionView setContent:data];. Эта память никогда не восстанавливается. Любые идеи?

РЕДАКТИРОВАТЬ: я получаю доступ к объекту данных следующим образом:

NSArray *data = [[[[MWWeatherController sharedInstance] cachedData] objectForKey:[NSString stringWithFormat:@"%u",index]] objectForKey:@"daily"];

person edc1591    schedule 24.09.2011    source источник
comment
Пожалуйста, дайте мне знать, если я могу что-то уточнить.   -  person edc1591    schedule 28.09.2011


Ответы (2)


Сделали ли вы ViewController для KVO CollectionView совместимым?

Имеет ли XIB для CollectionView ArrayController?

Привяжите CollectionView XIB к аранжированным объектам ArrayController и установите элементы с помощью метода ViewController, например. setMyCustomObjectsArray, который снова устанавливает массив, наблюдаемый ArrayController.

Убедитесь, что вы правильно освобождаете все в методе Dealloc вашего пользовательского объекта.

person Ole Viaud-Murat    schedule 29.09.2011
comment
Кроме того, указывают ли инструменты на утечку памяти или просто на огромный объем памяти? И что такое «огромный». Когда речь идет об утечке памяти, имейте в виду, что инструменты просто указывают место в коде, где было обнаружено наличие утечки памяти, это не обязательно место, ответственное за эту утечку памяти. - person Ole Viaud-Murat; 29.09.2011
comment
Как узнать, совместим ли мой элемент представления коллекции с KVO? Всем этим управляет IB, никаких подклассов или чего-то подобного. Я только что попытался управлять содержимым представления коллекции с помощью контроллера массива, но анализ heapshot Instruments по-прежнему указывает увеличение памяти на строку, где я добавляю объекты в массив. Кроме того, я все правильно выпускаю в методе Dealloc моего пользовательского объекта. - person edc1591; 30.09.2011
comment
Что касается вашего исходного вопроса: на самом деле вы должны устанавливать только элементы массива, а не назначать сам массив. Массив должен наблюдаться контроллером массива контроллера представления. - person Ole Viaud-Murat; 30.09.2011
comment
ОК, после еще нескольких исследований, похоже, что использование контроллера массива исправило увеличение памяти! Спасибо за помощь! - person edc1591; 01.10.2011

Я думаю, что вы не публикуете данные в своей области... если вы владеете объектом «данные», убедитесь, что вы его выпустили.

Некоторый запрос, чтобы ответить на него лучше -

  1. Как вы распределяете «данные»?
  2. Кто его выпускает?
  3. [коллекцияView setContent:данные]; больше фрагмента кода вокруг этой строки
person Girish Kolari    schedule 28.09.2011
comment
данные хранятся в NSDictionary в одноэлементном классе. данные существуют не только для представления коллекции, я использую эти данные в другом месте приложения. Я обновил свой вопрос, показав, как я получаю доступ к данным. - person edc1591; 28.09.2011