Нет функции сбора мусора. Тем не менее, любой объект, который вы copy
, retain
, alloc
и т. Д., Имеет свой счет хранения, увеличенный на единицу, и вы отвечаете за вызов release
или autorelease
- у вас есть экземпляр этого объекта , Если вы не позвоните [<YOUROBJECT> release];
или [<YOUROBJECT> autorelease];
, объект останется в памяти iPhone / iPod Touch / iPad, но указатель больше не останется, и произойдет утечка памяти, так как этот бит памяти больше не доступен , Автоматическое освобождение добавляет объект в пул автоматического освобождения и означает, что он будет освобожден в какой-то момент в будущем. Всегда используйте стандартный release
, где это возможно, так как autorelease
означает, что оно все еще будет оставаться в памяти устройства некоторое время, вы никогда не можете быть уверены, когда оно будет выпущено, и это немного более требовательный метод для вызова.
Никогда не вызывайте dealloc
для объекта - освобождение или автоматическое освобождение достаточно, и, если требуется, объект будет автоматически освобожден.
Убедитесь, что вы никогда не освобождаете объекты, которыми вы не владеете, и, если вы отпускаете объекты, вы отпускаете их после того, как вы их больше не используете - в противном случае вы можете попытаться получить доступ к этому объекту, и устройство не сможет найти объект, и эта ситуация приводит к сбою приложения из-за ошибки EXEC_BAC_ACCESS
- чтобы выяснить причину проблемы, откройте Инструменты, добавьте инструмент Распределение объектов и включите обнаружение NSZombie в его настройках (или добавьте инструмент «Зомби» (только доступно в iPhone SDK 3.2+)). Затем вы можете просмотреть всю историю объекта, который вызвал проблему, и перейти к точной строке кода, которая вызвала проблему.
Вы можете прочитать больше здесь .
Надеюсь, это помогло