Все, что делает ARC, - это гарантирует, что сообщения об удержании и освобождении отправляются в соответствующее время (когда вы запускаете и прекращаете ссылаться на объект). GC не существует - сделки делаются точно так же, как и раньше - что они и делают, когда счет удержания достигает 0.
Пул авто-релизов предназначен для того, когда вы вызываете авто-релиз вместо релиза. Это означает задержку вызова разъединения путем помещения его в очередь, управляемую пулом автоматического выпуска - когда пул очищается, для каждого объекта в очереди вызывается освобождение.
Итак, если вы зависите от ARC -
не вызывайте retain, release или autorelease самостоятельно - вы получите ошибку сборки, если попытаетесь в любом случае
используйте (сильные) свойства, чтобы удерживать ссылки, которые вам нужны, чтобы остаться рядом
если в итоге вы получите круговую ссылку - сильный указатель, указывающий на объект, который указывает назад, - тогда все это развалится - ARC ничего не выпустит. Вам нужно либо установить один из указателей на ноль, либо ослабить один из них.
Установите точки останова там, где, по вашему мнению, должен вызываться dealloc, и проверьте объекты retainCount. Используйте инструмент Утечки, чтобы выяснить, что может происходить.