NSTableViewDataSource dealloc в target-c - PullRequest
       4

NSTableViewDataSource dealloc в target-c

1 голос
/ 12 апреля 2011

В настоящее время я изучаю цель-c и сейчас я тренируюсь с NSTableView.

Вот моя проблема:

Я связал свое табличное представление с моим контроллером через Interface Builder, чтобы он имел источник данных, я реализовал протокол NSTableViewDataSource в моем контроллере и реализовал оба метода -(NSInteger) numberOfRowsInTableView: и -(id) tableView:objectValueForTableColumn:row:.

Я создал необработанный бизнес-класс («персона») и мне удалось отобразить его содержимое в моем NSTableView.

Но затем я добавил NSLog в мои методы dealloc, чтобы посмотреть, была ли освобождена память или нет, и кажется, что мой массив, а также мои экземпляры "person" никогда не освобождаются.

вот мой код деаллока в контроллере:

-(void)dealloc
{
    NSLog(@"the array is about to be deleted. current retain : %d",[personnes retainCount]);

    [personnes release];
    [super dealloc];
}

а в моем "личном" классе

-(void) dealloc
{
    NSLog(@"%@ is about to be deleted. current retain : %d",[self prenom],[self retainCount]);

    [self->nom release];
    [self->prenom release];

    [super dealloc];
}

Когда предполагается, что эти освобождения вызываются в жизненном цикле приложения? Потому что я ожидал, что они будут вызваны при закрытии окна, но это не так.

В надежде быть достаточно ясным

Спасибо:)

кайт.

Ответы [ 2 ]

4 голосов
/ 12 апреля 2011

Я предполагаю, что вы никогда не выпускаете объект контроллера окна, которому принадлежит (только) окно.Таким образом, контроллер окна и каждый объект верхнего уровня в nib-файле сохраняются на протяжении всего жизненного цикла приложения, включая окно (и его представления).

Поскольку контроллер окна существует на протяжении жизненного цикла приложения, он не 't, поэтому его метод -dealloc никогда не вызывается.И, поскольку метод контроллера -dealloc никогда не вызывается, его массив personnes не освобождается.

Массив personnes владеет своими элементами.Поскольку массив не освобожден, его элементы также не являются элементами, поэтому метод -dealloc соответствующего класса / экземпляров никогда не вызывается.

2 голосов
/ 12 апреля 2011

Не никогда используйте retainCount.Результаты в лучшем случае вводят в заблуждение.Если вы практикуете правильные методы управления памятью, все будет в порядке.Были ли у вас проблемы с памятью / сбои?

...