Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека разработчика Mac

Разработчик

Ссылка класса OSObject

Опции
Развертывание Target:

На этой странице
Язык:

OSObject

OSObject является конкретным корневым классом Libkern и иерархии класса C++ Набора I/O.

OSObject определяет минимальную функциональность, требуемую Libkern и классов C++ Набора I/O: принудительный ассортимент к средству информации о типах во время выполнения, динамической парадигме выделения/инициализации и подсчету ссылок. В то время как расширения ядра свободны использовать свои собственные классы C++ внутренне, любое взаимодействие, которое они имеют с Libkern, или Набор I/O потребует классов, в конечном счете полученных из OSObject.

Информация о типах во время выполнения

OSObject получен из абстрактного корневого класса OSMetaClassBase, объявляющий (и определяет многие из), примитивы, на которых базируется средство информации о типах во время выполнения. Параллельная иерархия наследования объектов метакласса обеспечивает самоанализ во время выполнения, включая доступ к именам классов, наследованию и безопасному преобразованию типа. Посмотрите OSMetaClass для получения дополнительной информации.

Динамическое Выделение/Инициализация

Резидентное ядром время выполнения C++ не поддерживает исключения, таким образом, классы Libkern не могут использовать типичных конструкторов объекта C++ и деструкторы, использующие исключения для создания отчетов об ошибках. Для поддержки обработки ошибок во время создания экземпляра, тогда, OSObject разделяет объектное выделение от инициализации. Можно создать новый OSObject-полученный экземпляр с new оператор, но это делает не что иное как выделяет память и инициализирует подсчет ссылок к 1. После этого необходимо вызвать определяемую функцию инициализации и проверить bool возвращаемое значение. Если инициализация перестала работать, необходимо сразу вызвать release на экземпляре и дескрипторе отказ любым способом является надлежащим. Много Libkern и классы Набора I/O определяют статические функции создания экземпляра (начинающийся со слова «с») для создания конструкции процессом с одним шагом для клиентов.

Подсчет ссылок

OSObject предоставляет услуги подсчета ссылок с помощью retain, release(), release(int freeWhen) и free функции. Открытый интерфейс к подсчету ссылок retain, и release; release(int freeWhen) предоставлен для объектов, имеющих внутренний, сохраняют циклы.

В целом подкласс, как ожидают, только переопределит free. Это может также принять решение переопределить release(int freeWhen) если объект имеет проспект, сохраняют количество, как отмечено выше.

Используйте ограничения

За очень немногими исключениями в Наборе I/O все находящиеся в Libkern классы C++, функции и макросы небезопасны использовать в основном контексте прерывания. Консультируйтесь с документацией Набора I/O, связанной с основными прерываниями для получения дополнительной информации.

Защита параллелизма

Основные характеристики OSObject ориентированы на многопотоковое исполнение. Если экземпляры совместно используются потоками, большинство подклассов Libkern не и требует блокировки или другой защиты. Объекты драйвера Набора I/O или разработаны для использования в ориентированных на многопотоковое исполнение контекстах или разработаны, чтобы по сути быть ориентированными на многопотоковое исполнение. Всегда проверяйте отдельную документацию класса для наблюдения, какие шаги необходимы для параллельного использования экземпляров.

Наследование


Не применимый

Соответствует


Не применимый

Оператор импорта


Не применимый

Objective C

@import Kernel;

Доступность


Доступный в OS X v10.0 и позже.
  • Освобождает/выпускает ресурсы, сохраненные объектом.

    Объявление

    C++

    virtual void free();

    Обсуждение

    Классы, полученные из OSObject, должны переопределить эту функцию, чтобы освободить или высвободить все динамические средства, сохраненные экземпляром, затем вызвать реализацию суперкласса.

    Предостережение:

    1. Вы не можете предположить завершение инициализации прежде free вызывается, так быть очень тщательным в Вашей реализации.

    2. Реализация OSOBJECT выполняет C++ delete из экземпляра, так быть уверенным, что Вы вызываете реализацию суперкласса в последний раз в Вашей реализации.

    3. free не должен перестать работать; все средства должны быть освобождены или высвобождены на завершении.

  • Возвращает подсчет ссылок объекта.

    Объявление

    C++

    virtual int getRetainCount() const;

    Возвращаемое значение

    Подсчет ссылок объекта.

  • Инициализирует недавно выделенный объект.

    Объявление

    C++

    virtual bool init();

    Возвращаемое значение

    true на успехе, false при отказе.

    Обсуждение

    Классы, полученные из OSObject, должны переопределить основной init метод своего родителя. В целом большая часть вызова реализаций ::init() прежде, чем сделать локальную инициализацию. Если тогда возвращаются сбои вызова суперкласса false сразу. Если подкласс встречается с отказом тогда, он должен возвратиться false.

  • Освобождает память самого объекта.

    Объявление

    C++

    static void operator delete( void *mem, size_tsize);

    Параметры

    mem

    Указатель на память объекта.

    size

    Размер блока объекта памяти.

    Обсуждение

    Никогда не используйте delete на объектах, полученных из OSObject; использовать release вместо этого.

  • Выделяет память для экземпляра класса.

    Объявление

    C++

    static void * operator new( size_tsize);

    Параметры

    size

    Число байтов для выделения

    Возвращаемое значение

    Указатель на блок памяти при наличии, NULL иначе.

  • Если подсчет ссылок опускается до нуля, выпускает ссылку на объект, освободив его сразу.

    Объявление

    C++

    virtual void release() const;

    Обсуждение

    Эта функция постепенно уменьшает подсчет ссылок получателя 1. Если подсчет ссылок опускается до нуля, объект сразу освобожден с помощью free.

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

    Объявление

    C++

    virtual void release( intfreeWhen) const;

    Параметры

    freeWhen

    Если постепенное уменьшение подсчета ссылок делает его> = freeWhen, объект сразу освобожден.

    Обсуждение

    Если получатель имеет freeWhen или меньше ссылок после его подсчета ссылок постепенно уменьшается, это сразу освобождено.

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

  • Сохраняет ссылку на объект.

    Объявление

    C++

    virtual void retain() const;

    Обсуждение

    Эта функция постепенно увеличивает подсчет ссылок получателя 1. Если необходимо поддержать ссылку на объект вне контекста, в котором Вы получили его, необходимо всегда сразу сохранить его.

  • Переопределенный подклассами для архивации получателя в предоставленный объект OSSerialize.

    Объявление

    C++

    virtual bool serialize( OSSerialize *serializer) const;

    Параметры

    serializer

    Объект OSSerialize.

    Возвращаемое значение

    true если сериализация успешно выполняется, false если нет.

    Обсуждение

    Реализация OSOBJECT пишет строку, указывающую, что класс объекта, получающего вызов функции, не является сериализуемым. Подклассы, которые могут обоснованно закодировать себя в XML списка Свойства стиля набора I/O, могут переопределить эту функцию, чтобы сделать так. См. OSSerialize для получения дополнительной информации.

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

    Объявление

    C++

    virtual void taggedRelease( const void *tag = 0) const;

    Параметры

    tag

    Используемый для отслеживания ссылок набора.

    Обсуждение

    Расширения ядра не должны использовать эту функцию. Это для использования OSCollection и подклассами для отслеживания включения в наборы.

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

    Объявление

    C++

    virtual void taggedRelease( const void *tag, const intfreeWhen) const;

    Параметры

    tag

    Используемый для отслеживания ссылок набора.

    freeWhen

    Если постепенное уменьшение подсчета ссылок делает его> = freeWhen, объект сразу освобожден.

    Обсуждение

    Расширения ядра не должны использовать эту функцию. Это для использования OSCollection и подклассами для отслеживания включения в наборы.

    Если получатель имеет freeWhen или меньше ссылок после его подсчета ссылок постепенно уменьшается, это сразу освобождено.

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

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

    Объявление

    C++

    virtual void taggedRetain( const void *tag = 0) const;

    Параметры

    tag

    Используемый для отслеживания ссылок набора.

    Обсуждение

    Расширения ядра не должны использовать эту функцию. Это для использования OSCollection и подклассами для отслеживания включения в наборы.

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