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

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

Разработчик

Ссылка класса OSMetaClassBase

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

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

OSMetaClassBase

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

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

Для получения дополнительной информации см. Руководство по проектированию Драйвера устройства IOKit.

Использование расширениями ядра

Расширения ядра никогда не должны взаимодействовать непосредственно с OSMetaClassBase, но они найдут полезные несколько макросов, которые соединяются к системе информации о типах во время выполнения в частности:

  • OSTypeAlloc - выделение новых экземпляров

  • OSDynamicCast - безопасное преобразование типа

  • OSCheckTypeInst - проверка наследование/деривацию

  • OSMemberFunctionCast - кастинг функций членства C++ к указателям функции C для регистрации как обратные вызовы

Посмотрите OSMetaClass для большего количества интерфейсов информации о типах во время выполнения.

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

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

Функции типа выполнения и макросы не безопасно вызвать в основном контексте прерывания.

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

Макросы типа выполнения и функции OSMetaClassBase ориентированы на многопотоковое исполнение.

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


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

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


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

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


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

Objective C

@import Kernel;

Доступность


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

    Объявление

    C++

    #define OSCheckTypeInst(typeinst, inst)

    Параметры

    typeinst

    Ссылочный объект.

    inst

    Объект проверить на соответствие типов.

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

    true если оба inst и typeinst не -NULL и inst получен из класса typeinst; иначе false.

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

    Objective C

    #include <OSMetaClass.h>;

    Доступность

    Доступный в OS X v10.0 и позже.

  • Безопасное преобразование типа для объектов C++ Libkern.

    Объявление

    C++

    #define OSDynamicCast(type, inst)

    Параметры

    type

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

    inst

    Указатель на экземпляр объекта, который будет брошен. Может быть NULL.

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

    inst если это не -NULL и полученный из type; иначе NULL.

    Обсуждение

    OSDynamicCast грубый эквивалент стандартному C++ RTTI dynamic_cast<T> оператор. Ваш код должен использовать это вместо сырых данных C преобразование типа и проверить получающееся значение. Если результат не -NULL, объект безопасно использовать в качестве класса преобразования типа; если результат NULL, объект не происходит из класса преобразования типа, и Ваш код должен предпринять надлежащие шаги для обработки ошибки.

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

    Objective C

    #include <OSMetaClass.h>;

    Доступность

    Доступный в OS X v10.0 и позже.

  • Преобразовывает указатель функции членства C++, относительно экземпляра, к указателю C-стиля на функцию.

    Объявление

    C++

    #define OSMemberFunctionCast(cptrtype, self, func)

    Параметры

    cptrtype

    Функциональное описание типа для кастинга к (обычно предоставленный как a typedef классами I/O KitKit).

    self

    this указатель объекта, функцию которого Вы хотите кэшировать.

    func

    Указатель на саму функцию членства, что-то как &Class::function.

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

    Указатель на функцию данной ссылки типа self.

    Обсуждение

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

    Никакие предупреждения не сгенерированы.

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

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

    Objective C

    #include <OSMetaClass.h>;

    Доступность

    Доступный в OS X v10.4 и позже.

  • Выпустите объект если нет NULL.

    Объявление

    C++

    #define OSSafeRelease(inst) do { if (inst) (inst)->release(); } while (0)

    Параметры

    inst

    Экземпляр OSObject, может быть NULL.

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

    Objective C

    #include <OSMetaClass.h>;

    Доступность

    Доступный в OS X v10.6 и позже.

  • Выпустите объект если нет NULL, тогда установите его в NULL.

    Объявление

    C++

    #define OSSafeReleaseNULL(inst) do { if (inst) (inst)->release(); (inst) = NULL; } while (0)

    Параметры

    inst

    Экземпляр OSObject, может быть NULL.

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

    Objective C

    #include <OSMetaClass.h>;

    Доступность

    Доступный в OS X v10.6 и позже.

  • Выделяет экземпляр класса именованного объекта.

    Объявление

    C++

    #define OSTypeAlloc(type)

    Параметры

    type

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

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

    Указатель на новый, неинициализированный объект на успехе; NULL при отказе.

    Обсуждение

    См. также OSMetaClass::allocClassWithName(const char *) и OSMetaClass::alloc.

    Макрос OSTypeAlloc используется для предотвращения трудностей с совместимостью на уровне двоичных кодов, представленных C++ new оператор.

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

    Objective C

    #include <OSMetaClass.h>;

    Доступность

    Доступный в OS X v10.2 и позже.

  • Возвращает идентификатор типа (метакласс) класса на основе его имени.

    Объявление

    C++

    #define OSTypeID(type)

    Параметры

    type

    Имя желаемого класса, как необработанный маркер, не строка или макрос.

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

    Уникальный идентификатор типа (метакласс) для класса.

    Обсуждение

    Обычно более полезно определить, получен ли класс от другого; посмотрите OSDynamicCast и OSCheckTypeInst.

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

    Objective C

    #include <OSMetaClass.h>;

    Доступность

    Доступный в OS X v10.0 и позже.

  • Возвращает идентификатор типа (метакласс) для класса экземпляра объекта.

    Объявление

    C++

    #define OSTypeIDInst(typeinst)

    Параметры

    typeinst

    Экземпляр подкласса OSObject.

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

    Идентификатор типа класса того объекта; т.е. его метакласс.

    Обсуждение

    Обычно более полезно определить, получен ли объект из определенного класса; посмотрите OSDynamicCast и OSCheckTypeInst.

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

    Objective C

    #include <OSMetaClass.h>;

    Доступность

    Доступный в OS X v10.0 и позже.

  • Проверки, является ли экземпляр объекта тот же класс как другой экземпляр объекта (или подкласс того класса).

    Объявление

    C++

    static bool checkTypeInst( const OSMetaClassBase *inst, const OSMetaClassBase *typeinst);

    Параметры

    inst

    Указатель на объект проверить.

    typeinst

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

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

    true если объект получен из класса typeinst или подкласс того класса, иначе false.

    Обсуждение

    Намного более удобно использовать OSCheckTypeInst.

  • Возвращает OSMetaClass, представляющий подкласс OSMetaClassBase.

    Объявление

    C++

    virtual const OSMetaClass * getMetaClass() const = 0;

    Обсуждение

    OSObject переопределяет эту абстрактную функцию членства для возврата объекта OSMetaClass, представляющего каждый класс для ввода во время выполнения.

  • Абстрактное объявление getRetainCount().

    Объявление

    C++

    virtual int getRetainCount() const = 0;

    Обсуждение

    Посмотрите OSObject::getRetainCount().

  • Проверки, равен ли другой объект получателю.

    Объявление

    C++

    virtual bool isEqualTo( const OSMetaClassBase *anObject) const;

    Параметры

    anObject

    Объект к copmare к получателю.

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

    true если объекты равны, false иначе.

    Обсуждение

    OSMetaClassBase реализует это как прямое сравнение указателя, так как он не имеет никакой другой информации для оценки равенства по. Подклассы обычно переопределяют эту функцию, чтобы сделать более значимое сравнение. Например, OSString реализует его для возврата true если anObject получен из OSString и представляет ту же струну до.

  • Броски этот объект к классу, которым управляет именованный OSMetaClass.

    Объявление

    C++

    OSMetaClassBase * metaCast( const char *toMeta) const;

    Параметры

    toMeta

    Струна до, называющая желаемый целевой тип.

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

    this если объект получен из класса, названного toMeta, иначе NULL.

    Обсуждение

    Намного более удобно использовать OSDynamicCast.

  • Броски этот объект к классу, которым управляет данный OSMetaClass.

    Объявление

    C++

    OSMetaClassBase * metaCast( const OSMetaClass *toMeta) const;

    Параметры

    toMeta

    Указатель на постоянный OSMetaClass для желаемого целевого типа.

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

    this если объект получен из класса, которым управляют toMeta, иначе NULL.

    Обсуждение

    Намного более удобно использовать OSDynamicCast.

  • Броски этот объект к классу, которым управляет именованный OSMetaClass.

    Объявление

    C++

    OSMetaClassBase * metaCast( const OSString *toMeta) const;

    Параметры

    toMeta

    OSString именование желаемого целевого типа.

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

    this если объект получен из класса, названного toMeta, иначе NULL.

    Обсуждение

    Намного более удобно использовать OSDynamicCast.

  • Броски этот объект к классу, которым управляет именованный OSMetaClass.

    Объявление

    C++

    OSMetaClassBase * metaCast( const OSSymbol *toMeta) const;

    Параметры

    toMeta

    OSSymbol именование желаемого целевого типа.

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

    this если объект получен из класса, названного toMeta, иначе NULL.

    Обсуждение

    Намного более удобно использовать OSDynamicCast.

  • Абстрактное объявление release.

    Объявление

    C++

    virtual void release() const = 0;

    Обсуждение

    Посмотрите OSObject::release.

  • Абстрактное объявление release(int freeWhen).

    Объявление

    C++

    virtual void release( int freeWhen) const = 0;

    Обсуждение

    Посмотрите release(int freeWhen).

  • Абстрактное объявление retain().

    Объявление

    C++

    virtual void retain() const = 0;

    Обсуждение

    Посмотрите OSObject::retain().

  • Броски объект к классу, которым управляет данный OSMetaClass.

    Объявление

    C++

    static OSMetaClassBase * safeMetaCast( const OSMetaClassBase *anObject, const OSMetaClass *toMeta);

    Параметры

    anObject

    Указатель на объект, который будет брошен.

    toMeta

    Указатель на постоянный OSMetaClass для желаемого целевого типа.

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

    anObject если объект получен из класса, которым управляют toMeta, иначе NULL.

    Обсуждение

    Намного более удобно использовать OSDynamicCast.

  • Абстрактное объявление serialize.

    Объявление

    C++

    virtual bool serialize( OSSerialize *serializer) const = 0;

    Обсуждение

    Посмотрите OSObject::serialize.

  • Абстрактное объявление taggedRelease(const void *).

    Объявление

    C++

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

    Обсуждение

    Посмотрите OSObject::taggedRelease(const void *).

  • Абстрактное объявление taggedRelease(const void *, const int freeWhen).

    Объявление

    C++

    virtual void taggedRelease( const void *tag, const int freeWhen) const = 0;

    Обсуждение

    Посмотрите OSObject::taggedRelease(const void *, const int freeWhen).

  • Абстрактное объявление taggedRetain(const void *).

    Объявление

    C++

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

    Обсуждение

    Посмотрите OSObject::taggedRetain(const void *).