сохранить кол может быть 0 или выше, но не меньше. Когда объект выделяет кучную память (alloc init
), счетчик удержания устанавливается равным 1. Затем вы можете увеличить количество удержаний, вызвав на нем retain
(насколько я знаю неограниченное количество раз, но я мог ошибаться).
Вызов release
просто уменьшила сохранить счет на 1. Система затем периодически проверяет сохраняют счетчики объектов и освобождает любого с числом 0.
Calling release
на уже высвобождены объект является такой же, как вызов любой метод на объекте NULL
и должен просто вернуть NULL
или void
. Однако, если вы объясняете управление памятью кучи, тогда вы должны быть ОЧЕНЬ осознавая, что вы делаете.
Некоторые интересные моменты:
Why can a retain count be more that 1?
Это так, что объект не освобождается, пока он все еще требуется что-то еще. Например. скажем, у вас есть pet
owner
и vet
. A pet
экземпляр принадлежит экземпляру owner
. owner
отправляется на экземпляр vet
, а vet
также является владельцем pet
. В течение периода времени pet
имеет двух владельцев и, следовательно, (если retain
был вызван) имеет счетчик сбережений 2. Позволяет сказать, что owner
затем освобождается до того, как vet
закончил с pet
; если все сделано правильно, то pet
не будет освобождено, просто будет уменьшено количество его повторного использования до 1 по вызову release
от owner
. Затем vet
заканчивается pet
, вызывается release
, а pet
будет освобожден.
ARC
Я уверен, что вы знаете это все было заменено автоматического подсчета ссылок на. В качестве разработчиков мы теперь должны просто знать тип отношения объекта к другому.
Поэтому, если вы создаете объект теперь будет освобождаться, когда она выпадает из сферы если имеет прочные отношения (находится в собственности) на другой объект. Вы можете получить циклы reatain, где два объекта имеют прочные отношения друг с другом и поэтому никогда не могут претендовать на освобождение.
Применяется для очень долгого ответа, но управление памятью является основной частью прикладного программирования и очень интересно.
Попробуйте найти «над выпуском объектива c» –
Предложение, данное Google, абсолютно правильно для вас. Похоже, что вы находитесь в неправильной области работы, вы должны быть мыслителем, а не разработчиком. Чтобы быть ясным, ваши исследования/усилия по управлению памятью очень плохие. Из всех заданных вопросов нет никакого отношения к реальному миру. Его вроде спрашивают, почему земля - это сфера? Если вам не нравится Objective C, вы можете создать свой собственный язык и идти вперед и сделать счетчик счета до -ve. Давайте также знать, если бы это имело смысл для вас тогда –
Почему бы вам даже задать эти вопросы? Никто не заботится. Пойдите и прочитайте об управлении памятью еще раз. – matt