Существует множество ответов на этот вопрос, так как вы говорите, что прочитали учебные пособия по управлению памятью, но я думаю, что вы ищете, это хороший пример, чтобы прояснить ситуацию в вашей голове.
Самое полезное объяснение по управлению памятью Какао, которое я прочитал, было в книге Хиллегаса (Программирование Какао для Mac OS X), где он описал объект как собаку. Каждый раз, когда вы используете один из методов, увеличивающих количество сохраняемых данных (new
, copy
, retain
, init
, некоторые из которых я наверняка забыл, они есть в руководстве по управлению памятью, которое вы уже использовали. прочитайте) затем вы кладете еще один поводок на шею собаки .
Теперь я перенесу эту совершенно хорошую метафору на глупые крайности. Вы просили яркий пример!
Вы должны снять любую из ваших отведений от собаки, как только вы закончите с ней. В противном случае вы поедете с привязанным к вашему автомобилю, как в «Отпуске Национального Лампуна», что не очень приятно - это утечка памяти .
Если у вас нет поводка на собаку, вы не можете гарантировать, что она будет там, когда вы хотите, чтобы она сделала трюк. Это может быть отправка сообщения освобожденному объекту .
Если вы идете, чтобы снять свою собаку с поводка, и на ней нет поводков, то собака может ужасно вас разорить, когда вы перепроизводите ее .
Так что, по сути, если вы положили поводок на собаку, вы должны снять его. Если вы этого не сделали (т.е. вы не звонили new
или retain
и т. Д.), То вы этого не сделаете. Это относится ко всем объектам. BOOL
и int
не являются объектами, поэтому вам не нужно о них беспокоиться.
Ни одна собака не пострадала во время моих ежедневных программных занятий