Объяснение в эти документы , помогает объяснить это:
КОЛИЧЕСТВО (*) возвращает количество объектов в группе, включая Нулевые значения и дубликаты.
КОЛИЧЕСТВО (выражение) оценивает выражение для каждой строки в группе и возвращает количество непустых значений.
, Таким образом, количество (*) включает, аннулирует, другой метод не делает.
Попробуйте запустить приложение с NSZombieEnabled. Это скажет вам, если вы выпустите какой-либо объект. Чтобы включить зомби, сделайте следующее:
- Выберите «Проект»> «Редактировать активный исполняемый файл», чтобы открыть информацию о исполняемом файле.
- Нажмите «Аргументы».
- Нажмите кнопку добавления (+) в «Переменные, которые нужно установить в environment ».
- Введите NSZombieEnabled в столбце Name и YES в столбце Value.
- Убедитесь, что установлен флажок для записи NSZombieEnabled.
После выхода ваше приложение может чрезмерно освободить объект, попробуйте сбросить каждый объект перед его освобождением или выполните некоторую отладку с помощью метода dealloc.
Возможно, вы освобождаете какой-либо объект больше раз, чем он удерживает. Закомментируйте вызовы -release
в своих методах dealloc
(или где-либо еще), пока не найдете виновника.
Затем раскомментируйте этот вызов и посмотрите в другом месте кода, где вы пытаетесь чрезмерно освободить этот объект.
Если вы используете удобные методы, например (например, [NSString stringWithFormat: @ "..."]
) в отличие от методов alloc-init
(например, [[NSString alloc] initWithFormat: @ "..."]
) результирующий вспомогательный объект выпускается автоматически и не должен освобождаться вручную.