ios dealloc с авто-релизом - PullRequest
       20

ios dealloc с авто-релизом

1 голос
/ 09 февраля 2012

У меня может быть терминология неверно в моем вопросе, но вот моя лучшая попытка:

ARC для моего приложения ios имеет включенную autoreleasepool. Поэтому я не высвобождаю памяти по своему выбору, но похоже, что она скорее GC.

У меня проблемы с тем, чтобы dealloc работал для конкретного UIView, который был удален из вида super. Это нормально?

1 Ответ

1 голос
/ 09 февраля 2012

Все, что делает ARC, - это гарантирует, что сообщения об удержании и освобождении отправляются в соответствующее время (когда вы запускаете и прекращаете ссылаться на объект). GC не существует - сделки делаются точно так же, как и раньше - что они и делают, когда счет удержания достигает 0.

Пул авто-релизов предназначен для того, когда вы вызываете авто-релиз вместо релиза. Это означает задержку вызова разъединения путем помещения его в очередь, управляемую пулом автоматического выпуска - когда пул очищается, для каждого объекта в очереди вызывается освобождение.

Итак, если вы зависите от ARC -

  1. не вызывайте retain, release или autorelease самостоятельно - вы получите ошибку сборки, если попытаетесь в любом случае

  2. используйте (сильные) свойства, чтобы удерживать ссылки, которые вам нужны, чтобы остаться рядом

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

Установите точки останова там, где, по вашему мнению, должен вызываться dealloc, и проверьте объекты retainCount. Используйте инструмент Утечки, чтобы выяснить, что может происходить.

...