Управление памятью

Управление памятью является дисциплиной программирования управления жизненными циклами объектов и освобождения их, когда они больше не необходимы. Управление объектной памятью является вопросом производительности; если приложение не освобождает ненужные объекты, его объем потребляемой памяти растет, и производительность страдает. Управление памятью в приложении Какао, не использующем сборку «мусора», основывается на модели подсчета ссылок. Когда Вы создаете или копируете объект, сохранять количество 1. После того другие объекты могут выразить долю в собственности в Вашем объекте, постепенно увеличивающем сохранял количество. Владельцы объекта могут также оставить свою долю в собственности в нем, постепенно уменьшающую сохранить количество. Когда сохранить количество становится нулем, объект освобожден (уничтоженный).

Для помощи Вам в управлении памятью Objective C дает Вам методы и механизмы, которые необходимо использовать в соответствии с рядом правил.

Memory management

Правила управления памятью

Правила управления памятью, иногда называемые политикой владения, помогают Вам явно управлять памятью в коде Objective C.

  • Вам принадлежит любой объект, который Вы создаете путем выделения памяти для него или копирования его.

    Связанные методы: alloc, allocWithZone:, copy, copyWithZone:, mutableCopy, mutableCopyWithZone:

  • Если Вы не создатель объекта, но хотите гарантировать, что это остается в памяти для Вас для использования, можно выразить долю в собственности в нем.

    Связанный метод: retain

  • При владении объектом, или путем создания его или выражения доли в собственности, Вы ответственны за выпуск его, когда Вам больше не нужен он.

    Связанные методы: release, autorelease

  • С другой стороны, если Вы не создатель объекта и не выразили долю в собственности, Вы не должны выпускать его.

При получении объекта откуда-либо в программе это, как обычно гарантируют, останется допустимым в методе или функции, в которой это было получено. Если Вы хотите, чтобы он остался допустимым, кроме того определяют объем, необходимо сохранить или скопировать его. При попытке выпустить объект, уже освобожденный, Ваши катастрофические отказы программы.

Аспекты управления памятью

Следующие понятия важны для понимания и должным образом управления объектной памятью:

  • Пулы автовыпуска. Отправка autorelease к меткам объекта объект для более позднего выпуска, который полезен, когда Вы хотите выпущенный объект сохраниться вне текущего объема. Автовыпуск объекта помещает его в пул автовыпуска (экземпляр NSAutoreleasePool), который создается для произвольного объема программы. когда выходы реализации программы, определяющие объем, объекты в пуле выпущены,

  • Освобождение. То, когда объект сохраняет количество, опускается до нуля, время выполнения вызывает dealloc метод класса объекта непосредственно перед тем, как это уничтожает объект. Класс реализует этот метод для освобождения любых ресурсов, которые объект содержит, включая объекты, на которые указывают его переменные экземпляра.

  • Методы фабрики. Много классов платформы определяют методы класса, как удобство, создающие объекты класса для Вас. Эти возвращенные объекты, как гарантируют, не будут допустимы вне объема метода получения.