освободить представление в viewDidUnload - PullRequest
1 голос
/ 30 мая 2011

Я знаю, что если я сохраню IBOutlet, используя свойство, тогда я должен установить его равным nil в viewDidUnload, но как насчет других?

Например, у меня есть три подпредставления view1, view2 и view3, которые загружаются из пера и это заголовочный файл контроллера

@interface MyViewController : UIViewController {
    IBOutlet UIView *view1;
    UIView *view2;
    //no reference for view3
}
@property (nonatomic, retain) IBOutlet UIView *view2;  //property view2 is an IBOutlet!!
@end

и метод viewDidUnload

- (void)viewDidUnload {
    self.view2 = nil;
    //[view1 release];
    //view1 = nil;
    [super viewDidUnload];
}

Должен ли я освободить view1 и установить его на ноль? или UIViewController установит для меня ноль? что насчет view3?

также я должен выпустить view1 в dealloc?

редактировать: Я думаю, что многие люди не понимают мой вопрос

Во-первых, view1 - это IBOutlet, который объявлен как ивар, и назначить ивару не удастся. Я знаю, что UIViewController определенно сохранит его, но должен ли я его выпустить или UIViewController выпустит его для меня? Если UIViewController выпустит его, то нет смысла выпускать его снова.

Во-вторых, view2 также является IBOutlet, хотя он объявлен как свойство, а не ivar.

@property (nonatomic, retain) IBOutlet UIView *view2;

Это свойство сохранения, поэтому установите его, оно сохранит его, поэтому я знаю, что для его освобождения я должен установить его на ноль. У меня нет проблем с этим.

Для view3 для него нет ссылки, поэтому я предполагаю, что мне не нужно ничего с этим делать. Я также предполагаю, что нет необходимости делать ссылку на every объект в nib.

Ответы [ 2 ]

0 голосов
/ 31 мая 2011

Все торговые точки сохраняются по умолчанию, даже если для них не объявлено свойство. Так что вам нужно будет отпустить их. Если вы продолжите объявлять assign ed свойство как выход, то вам не нужно освобождать, но вы также не можете полагаться на него, так как вы не являетесь владельцем.

Таким образом, вам нужно освободить как view1, так и view2, поскольку они объявлены как торговые точки. view3 - это переменная, которая не существует и, следовательно, о ней не нужно беспокоиться.

0 голосов
/ 30 мая 2011

При загрузке пера все его объекты автоматически создаются и сохраняются. В этом случае владельцем вашего nib-файла является ваш UIView.

Если вы используете UIView * view2, вы не можете подключить их с помощью построителя интерфейса. Так что для меня это не имеет смысла.

Вы также должны выпустить в dealloc.

- (void)viewDidUnload {
  self.view1 = nil;
  self.view2 = nil;
  [super viewDidUnload];
}

- (void)dealloc {
  [self.view1 release];
  self.view1 = nil;
  [self.view2 release];
  self.view2 = nil;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...