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