UIView не выпускается правильно - PullRequest
2 голосов
/ 10 мая 2011

У меня большая иерархия view / viewcontrollers.
В главном контроллере у меня есть следующий код, где aViewController является членом MyClass:

@implementation MyClass

...

- (void) viewDidLoad
{
    [self.view addSubview:aViewController_.view];
    [aViewController_ setDataSource:self];
    [aViewController_ setDelegate:self];
}

- (void)dealloc 
{
    //[aViewController_.view removeFromSuperview]; // All ok when this is added
    [aViewController_ release];
    [super dealloc];
}

...

@end

При выполнении этого я вижу, что aViewController никогда не освобождается - сохранение количества остается на 1 в конце.
Если я добавлю [aViewController_.view removeFromSuperview];, чтобы все освободилось, все работает нормально.

Почему это так?Разве [super dealloc] не должен заботиться об освобождении представления?Имеет ли значение, что представление освобождается после контроллера?

Я попытался воспроизвести с помощью простого тестового приложения без какой-либо удачи.

1 Ответ

3 голосов
/ 10 мая 2011

Это добавление вашего представления в подпредставление aViewController_.view.

[self.view addSubview:aViewController_.view];

aViewController_.view сохраняет представление, поэтому при отпускании основного контроллера представление не освобождается, что является правильным.

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

" главный контроллер " исчезнет, ​​когда вы отпустите его, но в суперпредставлении все еще сохраняется подпредставление.

Вы можете сделать это где-нибудь в aViewController_, когда вы закончили с представлением, прежде чем отпустить контроллер, которому принадлежит представление.

Трудно сказать, не видя весь ваш код.

Просто помните, что когда вы добавляете представление в другое представление, супер-представление сохраняет представление до тех пор, пока оно не будет удалено.

...