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++ RTTIdynamic_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 (константа, недействительная *, интервал константы) - taggedRelease (константа, недействительная *, интервал константы)
Абстрактное объявление
taggedRelease(const void *, const int freeWhen)
.Объявление
C++
virtual void taggedRelease( const void *
tag
, const intfreeWhen
) 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 *)
.