Удалить все подпредставления в dealloc? - PullRequest
2 голосов
/ 10 апреля 2011

В настоящее время я понимаю, что суперпредставления сохраняют каждое из своих подпредставлений. Для подкласса UIView, мне нужно удалить все мои подпредставления из их суперпредставления как часть dealloc? В настоящее время я просто выпускаю свои IBOutlets, удаляю наблюдаемые уведомления и очищаю любые надоедливые ивары.

Или удаление и освобождение подпредставлений части [super dealloc] из UIView?

Ответы [ 2 ]

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

Как часть сделки, представление автоматически удаляет подпредставления. Так что вам не нужно их удалять. Однако, если ваше представление сохранило какое-либо из своих подпредставлений [кроме автоматического сохранения], вы должны освободить их во время освобождения.

Так, например, предположим, что ваше представление содержало следующий код:

[заголовочный файл]

 UILabel *myLabel;  
 @property (nonatomic, retain) UILabel *myLabel;  

[файл реализации]

 someLabel = [[UILabel alloc]initWithFrame: someFrame];
 [self addSubview: someLabel];
 self.myLabel = someLabel;
 [someLabel release];  // now retained twice, once by the property and once as a subview

 someButton = [[UIButton alloc]initWithFrame: someOtherFrame];
 [self addSubview: someButton];
 [someButton release];  // retained once as it is a subview

тогда ваш метод dealloc будет выглядеть так:

 - (void) dealloc {
   [myLabel release];
   [super dealloc];
 }
3 голосов
/ 10 апреля 2011

UIView сохраняет свои подпредставления, поэтому он отвечает за их публикацию. Ваш подкласс не владеет этими представлениями (если вы явно не сохраняете их), поэтому вам не нужно беспокоиться об их освобождении.

Похоже, вы поступаете правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...