Я не уверен, правильно ли я понимаю термин утечка памяти. Относится ли это к неправильному освобождению памяти, а затем, когда мое приложение закрывается, остается неиспользуемая висящая память?
Нет; утечка памяти - это утечка памяти , в то время как приложение все еще работает, поскольку OS X освобождает всю память, когда приложение завершается. Если это не так, это может вызвать огромные проблемы из-за плохого кодирования и управления памятью и повлиять на всю систему.
Речь идет в основном о слишком большом удержании объекта или недостаточном освобождении памяти. Например, при добавлении объектов в массив это обычный способ сделать это:
NSMutableArray *array; //Pointer to some already allocated array
[array addObject:someObject];
[someObject release];
При условии, что someObject
был выделен правильно, он начнется с счетчика сохранения 1. Когда вы добавляете объекты в массив, массив вызывает retain
для рассматриваемого объекта, увеличивая его, в данном случае, до 2.
Когда массив освобождается, он отправляет release
всем своим объектам; в этом сценарии счет сохранения будет уменьшен до 1 (при условии, что никто другой не сохранил объект). Это не 0, поэтому someObject
все еще существует. Если бы someObject
был локальным указателем, созданным внутри метода, и у вас больше не было указателя на этот объект, тогда память зависла бы там. Это пример утечки памяти, которая заставляет ваше приложение использовать больше памяти, чем требуется , и будет страдать до тех пор, пока не прекратится.