iOS: когда выпустить объекты-члены? - PullRequest
1 голос
/ 15 марта 2012

Когда мне нужно освобождать объекты, объявленные в файле .h и размещенные в моем файле .m Авторелиз дает мне ошибку. Должен ли я выпустить их в

-(void)dealloc{

}

метод (как свойства)?

Thx

Ответы [ 5 ]

4 голосов
/ 15 марта 2012

во-первых, добавьте [super dealloc], это важно:

-(void)dealloc{
   [var1 release], var1 = nil;
   [var2 release], var2 = nil;
   [super dealloc];
}

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

2 голосов
/ 15 марта 2012

Если вы используете ARC (по умолчанию в последней версии XCode), тогда автоматически сохраняются / освобождаются вставки, и вам нужно беспокоиться только о графе объектов (сохраняя ссылки, когда вам нужноиспользуйте объект и избегайте циклических ссылок).

Если нет, вы правы, что dealloc - правильное место для освобождения переменных-членов.Хотя специально для тех, что созданы в viewDidLoad, помните, что ваш вид может загружаться / выгружаться несколько раз в течение срока службы вашего контроллера, поэтому рассмотрите возможность использования viewDidUnload для освобождения этих объектов.

0 голосов
/ 15 марта 2012

Если вы хотите избежать серьезных проблем, связанных с управлением памятью и утечками памяти, вам нужно прояснить свои сомнения относительно размещения объектов и их освобождения.Попробуйте эту ссылку http://iosdevelopertips.com/objective-c/memory-management.html

0 голосов
/ 15 марта 2012

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

Конечно, если вы используете ARC, вам не нужно явно освобождать свои ivars в dealloc, так как ARC сгенерирует реализацию dealloc, которая сделает это за вас.

0 голосов
/ 15 марта 2012

Если вы используете ARC (автоматический подсчет ссылок), то нет. Это делается для вас автоматически. Если вы не используете ARC, то вы делаете это вручную, как обычно. Обратите внимание, что новые проекты будут использовать ARC автоматически, и ARC выдаст вам ошибку, если вы попытаетесь release, retain или autorelease и object.

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