Интернет магазин китайских планшетных компьютеров



Компьютеры - Cocoa - Управление памятью

01 мая 2011


Оглавление:
1. Cocoa
2. История Cocoa
3. Управление памятью
4. Основные фреймворки
5. Модель-представление-поведение
6. Позднее связывание
7. Объекты с богатыми возможностями
8. Реализации



Одной из особенностей среды Cocoa является механизм для управления динамически выделяемой памятью. В классе NSObject, от которого порождается большинство классов Cocoa, как стандартных, так и пользовательских, для управления памятью реализован механизм подсчёта ссылок. Объекты, порождённые от NSObject отвечают на сообщения retain и release и хранят количество ссылок, которое можно узнать, послав объекту сообщение retainCount. Объект, заново созданный с помощью методов alloc или copy имеет количество ссылок, равное единице. Посылка объекту сообщения retain увеличивает количество ссылок, а посылка сообщения release уменьшает его. Когда количество ссылок достигает нуля, он удаляется, и занимавшаяся им память освобождается. Подобный подход с подсчётом ссылок весьма похож на применяемый в COM от Microsoft с его интерфейсом IUnknown. IUnknown обеспечивает функциональность, аналогичную retain и release в форме AddRef и Release.

В дополнение к подсчёту ссылок, программисты могут воспользоваться автоматически высвобождаемыми пулами. Посылка объекту сообщения autorelease регистрирует объект в ближайшем автоматически высвобождаемом пуле текущего потока для высвобождения в будущем. Когда сам автоматически высвобождаемый пул высвобождается, он посылает сообщение release на каждое посланное прежде сообщение autorelease. Автоматически высвобождаемые пулы обычно создаются и высвобождаются в начале и в конце цикла сообщений, гарантируя, что выполнение программы выйдет за пределы блока, в котором объекты были зарегистрированы для автоматического высвобождения. Это означает, что приложение выполняется предсказуемо, и освобождение памяти происходит прозрачно для пользователя, в то время как при использовании автоматического сборщика мусора в большинстве случаев программа неожиданно перестаёт реагировать на действия пользователя при его запуске.

Автоматическая сборка мусора в Cocoa поддерживается начиная с Objective-C 2.0 при разработке в Xcode 3.0, включённом в поставку Mac OS X 10.5 Leopard. Программист теперь имеет возможность выбрать между автоматической и ручной работой с памятью. Мнения о наиболее эффективном способе управления памятью разделились. Некоторые программисты утверждают, что подсчёт ссылок лучше, так как он позволяет разработчику иметь точный контроль над тем, когда высвобождаются объекты, и при этом не требует выделения памяти вручную под каждый объект, который используется в программе, а также не вызывает задержек в работе, характерных для автоматической сборки мусора. Другие говорят, что вся эта схема бесполезна, что автоматическая сборка мусора в манере Java это наилучшее решение, так как она в значительной мере уменьшает вероятность ошибок программиста при работе с памятью. Сборка мусора в Cocoa не нарушает обратную совместимость программ, она используется только для проектов специально скомпилированных с её использованием.

Также возможно совместить эти два подхода. Современные сборщики мусора часто позволяют запускать и останавливать себя посреди выполнения задачи, что даёт возможность приложению контролировать время, выделяемое на системные вызовы. Комбинирование этого подхода с автоматически высвобождаемыми по завершении цикла сообщений пулами AppKit кажется, предлагает наилучший компромисс. Подобная система была успешно реализована в GNUStep, свободно распространяемом аналоге OpenStep от GNU.



Просмотров: 6717


<<<