Похоже, что нет обнаруживаемой утечки.Посмотрите на эту строку:
brain = [[CalculatorBrain alloc] init];
Пока brain
указывает на объект, этот объект не будет считаться "утечкой памяти".Если в какой-то момент вы сделаете это,
brain = nil;
Тогда утечка будет зарегистрирована.Отмена выделения объекта-контейнера также приведет к этому, но вы уверены , что он был освобожден?(Например, он не будет освобожден при выходе из программы.)
Проблема: Детекторы утечек не могут обнаружить все утечки памяти - это математическидоказанный факт.Большинство детекторов обнаруживают только недоступные объекты, а многие детекторы утечек особенно чувствительны к ложным отрицаниям - в C трудно определить разницу во время выполнения между указателем и целым числом.
Редактировать: Похоже, ваше приложение только когда-либо создает один экземпляр контроллера, который создает только один экземпляр CalculatorBrain
.Если вы думаете о том, что на самом деле утечка памяти составляет , вы можете определить ее как неиспользуемую память, которую ваша программа не освобождает обратно в операционную систему.
- Во время работы программы,
CalculatorBrain
всегда используется и поэтому не является утечкой. - При выходе из программы операционная система автоматически восстанавливает всю память, используемую вашим процессом, поэтому не может быть никаких утечек памяти после выхода из программы.
Если вы хотите создатьЧтобы увидеть, как это выглядит, вы можете создать новый CalculatorBrain
несколько раз во время работы вашей программы, но забудьте о выпуске неиспользуемых версий.В этом случае при запуске вашей программы накапливается все больше и больше экземпляров CalculatorBrain
.На iOS и других встроенных системах это обычно приводит к сбою вашей программы.На современном 64-разрядном компьютере он будет постепенно заполнять доступное пространство подкачки до тех пор, пока у вас не закончатся области подкачки, адресное пространство или какой-либо другой ресурс, что приведет к сбою программы или сделает систему очень не отвечающей на запросы.
СтандартныйПрактика заключается в том, чтобы не заботиться об освобождении объектов, которые должны существовать на протяжении всего выполнения программы.