2012-02-08 4 views
0

Я отпускаю объекты, созданные в соответствии с директивой @property в методе dealloc как этотВысвобождение объекты

-(void)dealloc 
{ 
    [object release], object = nil; 
} 

У меня есть два вопроса.

  1. Является ли метод dealloc правильным местом для выпуска объекта, генерируемого @property?
  2. Является ли хорошей практикой устанавливать объекты на ноль?
+0

видеть этот пост для обработки памяти http://iphone2020.wordpress.com/2010/05/30/efficient- memory-handling-in-uiviewcontroller-part-1/ –

ответ

0
  1. Это правильное место, чтобы быть отпускания объекта. Очевидно, только если вы не компилируете с ARC, но, как и в ARC, вы даже не можете позвонить release.

  2. Нет никакой реальной точки, чтобы установить ее на nil. Он вот-вот будет полностью разрушен - зачем беспокоиться об этом nil?

1

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

Чтобы положить две строки кода в один, просто использовать методы доступа:

self.object = nil; //this will both release an object and set its pointer to nil 
+1

Помните, когда вы делаете это, ваш сеттер имеет какие-либо побочные эффекты. –

+1

Там я исправил: _Нет это не очень хорошая практика, поэтому установите указатель на нуль после отпускания объекта. Причина в том, что если вы попытаетесь получить доступ к значению этого объекта в будущем после того, как объект будет освобожден, вы попытаетесь получить доступ к значению мусора (он называется обвисшим указателем), и ваше приложение выйдет из строя. Из-за этого сбоя вы сразу узнаете, что у вас есть ошибка управления памятью в вашем коде, и вы можете это исправить. Но если указатель установлен на nil, вы покроете эту ошибку управления памятью, пока она не приведет к сбою или сбоям где-то в другом месте. –

+0

Ну, я должен признать, что вы правы, когда говорите об отладке. – Eugene