объяснение Apple посоветует ноль объектов в "viewDidUnload"? - PullRequest
1 голос
/ 30 марта 2011

Меня заинтересует любой, кто может предоставить чуть больше информации относительно рекомендации Apple, приведенной ниже (см. Учебник по основным данным) о переименовании объектов в "viewDidUnload". Например:

  • почему это важно? отличается от выпуска ноль?
  • это лучшая практика / я не делал этого и не видел этого, я не думаю, что в каком-то примере кода iPhone, на который я смотрел?

Код:

// The implementation of viewDidUnload should relinquish ownership 
// of anything created in viewDidLoad that can be recreated.

- (void)viewDidUnload {
  self.eventsArray = nil;
  self.locationManager = nil;
  self.addButton = nil;
}

- (void)dealloc {
  [managedObjectContext release];
  [eventsArray release];
  [locationManager release];
  [addButton release];
  [super dealloc];
}

Ответы [ 2 ]

5 голосов
/ 30 марта 2011

Установка свойств на nil также приведет к их освобождению (при условии, что метод установки освобождает старое значение, как и должно).

Кроме того, установка свойств на nil означает, что любые сообщения, которые могут в конечном итоге быть отправлены им впоследствии, будут проглочены nil и проигнорированы. В ситуации, когда они были просто освобождены, объект может быть освобожден и перезаписан в памяти, но им все равно могут быть отправлены сообщения (которые теперь отправляются тому, кто их перезаписал в памяти), что может вызвать сбой, исключение или другое неожиданное поведение.

0 голосов
/ 30 марта 2011

Метод viewDidUnload будет вызван, когда у нас будет нехватка памяти. В ситуациях с нехваткой памяти xibs будут освобождены из памяти, чтобы освободить память для приложения. Но это не будет достаточно эффективным, если мы все еще сохраняем объекты пера в нашем приложении. Поэтому, когда мы устанавливаем для наших объектов nib значение nil в viewDidUnload, мы помогаем освободить больше памяти.

...