Выпуск Objective C, авто-выпуск и типы данных
Я новичок в коде, управляемом памятью, но довольно хорошо понимаю эту идею.
Проходя мое приложение через инструмент утечки в XCode, я заметил, что мне нужно было только очистить свои пользовательские объекты, но не динамически создаваемые массивы, например, поэтому я решил, что эти типы данных автоматически высвобождаются - имеет смысл, поскольку мне нужно было только освободить массивы Я использовал в качестве свойств, которые имели (сохранить) на них.
Затем я заметил нечто странное: у меня возникла утечка в некотором массиве, инициализированном так:
NSMutableArray *removals = [NSMutableArray new];
но не похожий
NSMutableArray *removals = [NSMutableArray arrayWithCapacity:9];
Теперь причина была установлена с "новым" в том, что в нем может быть 0-99 элементов, тогда как другой, который я знал, будет всегда 9. Поскольку оба массива передаются одному и тому же методу позже на основе взаимодействия с пользователем, я либо получал утечку, если не сделал этого. отпустите в конце метода или исключение, если я это сделал!
Я изменил первый массив на
NSMutableArray *removals = [NSMutableArray arrayWithCapacity:99];
и я не получаю утечек и не должен ничего выпускать. Кто-нибудь может объяснить?