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).selfthisуказатель объекта, функцию которого Вы хотите кэшировать.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;Параметры
toMetaOSString именование желаемого целевого типа.
Возвращаемое значение
thisесли объект получен из класса, названногоtoMeta, иначеNULL.Обсуждение
Намного более удобно использовать
OSDynamicCast. -
Броски этот объект к классу, которым управляет именованный OSMetaClass.
Объявление
C++
OSMetaClassBase * metaCast( const OSSymbol *toMeta) const;Параметры
toMetaOSSymbol именование желаемого целевого типа.
Возвращаемое значение
thisесли объект получен из класса, названногоtoMeta, иначеNULL.Обсуждение
Намного более удобно использовать
OSDynamicCast. -
Абстрактное объявление
release.Объявление
C++
virtual void release() const = 0;Обсуждение
Посмотрите
OSObject::release. -
Абстрактное объявление
release(int freeWhen).Объявление
C++
virtual void release( intfreeWhen) 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 *).
