2012-02-08 2 views
1

я, возможно, терминологию неправильно в моем вопросе, но вот моя лучшая попытка:ИОС dealloc с autoreleasepool

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

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

ответ

1

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

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

Так что, если вы в зависимости от ARC -

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

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

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

Положите точки останова, на которых вы думаете, что dealloc следует вызывать и проверить объекты saveCount. Используйте инструмент «Утечки», чтобы выяснить, что может происходить.

Смежные вопросы