Коллекции сохраняют объекты, которые вы добавляете к ним, требуя временного владения. Когда вы удаляете элемент из коллекции, он освобождает объект (и его временное требование). Другими словами, количество сохранений будет таким же, как до добавления объекта в коллекцию и после его удаления.
Если этот счетчик равен 0, память восстанавливается.
В своем коде вы выделяете объект и заявляете о праве собственности на него. Это означает, что он имеет счет удержания 1.
Затем вы добавляете его в массив. Массив сохраняет объект, принимая временное владение и увеличивая его счетчик хранения до 2.
Затем вы удаляете объект из массива. Массив освобождает объект и отказывается от любых претензий на право собственности, в результате чего количество сохраняемых данных уменьшается до 1.
Поскольку память не восстанавливается до тех пор, пока значение счетчика не вернется к 0 (никто не претендует на объект), память вашего объекта не восстанавливается.
Если вы автоматически освободили объект до добавления его в массив или вызвали release для объекта после того, как удалили его (но не оба!), То счетчик сохранения будет равен 0, и память будет освобождена.