OSMetaClass
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Не применимый
Objective C
@import Kernel;
Доступность
Доступный в OS X v10.0 и позже.
-
Резервирует vtable пространство для новых виртуальных функций в классе C++ Libkern.
Объявление
C++
#if 1 #define OSMetaClassDeclareReservedUnused(className, index) #else #define OSMetaClassDeclareReservedUnused(className, index) #endif
Параметры
className
Имя класса C++, как необработанный маркер, не строка или макрос.
index
Числовой индекс vtable слота, как необработанная константа, начинаясь от 0.
Обсуждение
Классы C++ Libkern в расширениях ядра, которые могут использоваться в качестве библиотек, могут предусмотреть обратную совместимость путем объявления многих зарезервированных vtable слотов, которые могут быть заменены новыми функциями, поскольку они добавляются. Каждое зарезервированное объявление должно сопровождаться в реализации соответствующей ссылкой на
OSMetaClassDefineReservedUnused
.При замене зарезервированного слота измените макрос от «Неиспользованного» до «Используемого» для документирования факта, что слот раньше резервировался и объявлял, что новая функция сразу после «Используемого» макроса сохраняет vtable упорядочивание. Посмотрите
OSMetaClassDeclareReservedUsed
. -
Определяет зарезервированный vtable слот для класса C++ Libkern.
Объявление
C++
#if 1 #define OSMetaClassDefineReservedUnused(className, index) #else #define OSMetaClassDefineReservedUnused(className, index) #endif
Параметры
className
Имя класса C++, как необработанный маркер, не строка или макрос.
index
Числовой индекс vtable слота, как необработанная константа, начинаясь от 0.
Обсуждение
Классы C++ Libkern в расширениях ядра, которые могут использоваться в качестве библиотек, могут предусмотреть обратную совместимость путем объявления многих зарезервированных vtable слотов, которые могут быть заменены новыми функциями, поскольку они добавляются. Каждый зарезервировал defintion, сопровождает соответствующее объявление, создаваемое с
OSMetaClassDeclareReservedUnused
.Этот макрос используется в файле реализации для обеспечения определения заполнителя для зарезервированного vtable слота как вызывающая функция
panic
с сообщением об ошибке.При замене зарезервированного слота измените макрос от «Неиспользованного» до «Используемого» для документирования факта, что слот раньше резервировался и объявлял, что новая функция сразу после «Используемого» макроса сохраняет vtable упорядочивание. Посмотрите
OSMetaClassDefineReservedUsed
. -
Объявляет информацию о типах во время выполнения и функции для абстрактного класса C++ Libkern.
Объявление
C++
#define OSDeclareAbstractStructors(className)
Параметры
className
Имя класса C++, как необработанный маркер, не строка или макрос.
Обсуждение
Абстрактные классы C++ Libkern - те по крайней мере с одним чистым виртуальным методом - должны сразу «вызвать» этот макрос после вводной фигурной скобки в объявлении класса. Это оставляет текущее состояние конфиденциальности как
protected:
.Оператор импорта
Objective C
#include <OSMetaClass.h>;
Доступность
Доступный в OS X v10.0 и позже.
-
Объявляет информацию о типах во время выполнения и функции для конкретного класса C++ Libkern.
Объявление
C++
#define OSDeclareDefaultStructors(className)
Параметры
className
Имя класса C++, как необработанный маркер, не строка или макрос.
Обсуждение
Конкретные классы C++ Libkern должны сразу «вызвать» этот макрос после вводной фигурной скобки в объявлении класса. Это оставляет текущее состояние конфиденциальности как
protected:
.Оператор импорта
Objective C
#include <OSMetaClass.h>;
Доступность
Доступный в OS X v10.0 и позже.
-
Объявляет информацию о типах во время выполнения и функции для заключительного (неподподдающегося классификации) класса C++ Libkern.
Объявление
C++
#define OSDeclareFinalStructors(className)
Параметры
className
Имя класса C++, как необработанный маркер, не строка или макрос.
Обсуждение
Заключительные классы C++ Libkern - те, которые не позволяют разделять на подклассы - должны сразу «вызвать» этот макрос после вводной фигурной скобки в объявлении класса. (Заключительные классы в ядре могут фактически иметь подклассы в ядре, но kexts не может определить подклассы заключительного класса.) Это оставляет текущее состояние конфиденциальности как
protected:
.Примечание: Если класс экспортируется pseudokext (набор символов), последний символ, сгенерированный этим макросом, должен быть экспортирован для атрибута заключительного класса, который будет осуществлен.
Предупреждение: Изменение класса от «Значения по умолчанию» до «Финала» повредит совместимость на уровне двоичных кодов.
Оператор импорта
Objective C
#include <OSMetaClass.h>;
Доступность
Доступный в OS X v10.6 и позже.
-
Определяет OSMetaClass и связанные подпрограммы для абстрактного класса C++ Libkern.
Объявление
C++
#define OSDefineMetaClassAndAbstractStructors(className, superclassName)
Параметры
className
Имя класса C++, как необработанный маркер, не строка или макрос.
superclassName
Имя суперкласса класса C++, как необработанный маркер, не строка или макрос.
Обсуждение
Абстрактные классы C++ Libkern - те по крайней мере с одним чистым виртуальным методом - должны «вызвать» этот макрос в начале своих файлов реализации перед любыми реализациями функции для класса.
Оператор импорта
Objective C
#include <OSMetaClass.h>;
Доступность
Доступный в OS X v10.0 и позже.
-
Определяет OSMetaClass и связанные подпрограммы для заключительного (неподподдающегося классификации) класса C++ Libkern.
Объявление
C++
#define OSDefineMetaClassAndFinalStructors(className, superclassName)
Параметры
className
Имя класса C++, как необработанный маркер, не строка или макрос.
superclassName
Имя суперкласса класса C++, как необработанный маркер, не строка или макрос.
Обсуждение
Заключительные классы C++ Libkern - те, которые не позволяют разделять на подклассы - должны «вызвать» этот макрос в начале их файлов реализации перед любыми реализациями функции для класса. (Заключительные классы в ядре могут фактически иметь подклассы в ядре, но kexts не может определить подклассы заключительного класса.)
Примечание: Если класс экспортируется pseudokext (набор символов), последний символ, сгенерированный этим макросом, должен быть экспортирован для атрибута заключительного класса, который будет осуществлен.
Предупреждение: Изменение класса от «Значения по умолчанию» до «Финала» повредит совместимость на уровне двоичных кодов.
Оператор импорта
Objective C
#include <OSMetaClass.h>;
Доступность
Доступный в OS X v10.6 и позже.
-
Определяет OSMetaClass и связанные подпрограммы для конкретного класса C++ Libkern.
Объявление
C++
#define OSDefineMetaClassAndStructors(className, superclassName)
Параметры
className
Имя класса C++, как необработанный маркер, не строка или макрос.
superclassName
Имя суперкласса класса C++, как необработанный маркер, не строка или макрос.
Обсуждение
Конкретные классы C++ Libkern должны «вызвать» этот макрос в начале своих файлов реализации перед любыми реализациями функции для класса.
Оператор импорта
Objective C
#include <OSMetaClass.h>;
Доступность
Доступный в OS X v10.0 и позже.
-
Использование документов зарезервированного vtable пространства для новых виртуальных функций в классе C++ Libkern.
Объявление
C++
#define OSMetaClassDeclareReservedUsed(className, index)
Параметры
className
Имя класса C++, как необработанный маркер, не строка или макрос.
index
Числовой индекс vtable слота, как необработанная константа, начинаясь от 0.
Обсуждение
Этот макрос не оценивает ни к чему и используется для документирования зарезервированных vtable слотов, поскольку они переполнены. Посмотрите
OSMetaClassDeclareReservedUnused
.Оператор импорта
Objective C
#include <OSMetaClass.h>;
Доступность
Доступный в OS X v10.0 и позже.
-
Резервирует vtable пространство для новых виртуальных функций в классе C++ Libkern.
Объявление
C++
#define OSMetaClassDefineReservedUsed(className, index)
Параметры
className
Имя класса C++, как необработанный маркер, не строка или макрос.
index
Числовой индекс vtable слота, как необработанная константа, начинаясь от 0.
Обсуждение
Этот макрос не оценивает ни к чему и используется для документирования зарезервированных vtable слотов, поскольку они переполнены. Посмотрите
OSMetaClassDefineReservedUnused
.Оператор импорта
Objective C
#include <OSMetaClass.h>;
Доступность
Доступный в OS X v10.0 и позже.
-
Выделяет экземпляр класса C++, которым управляет этот метакласс.
Объявление
C++
virtual OSObject * alloc() const = 0;
Возвращаемое значение
Указатель на недавно выделенный, неинициализированный экземпляр, с сохранить количеством 1;
NULL
при отказе выделения.Обсуждение
Эта функция автоматически создается макросами регистрации метакласса для включения динамического выделения экземпляра.
-
Выделяет экземпляр именованного OSObject-производного-класса.
Объявление
C++
static OSObject * allocClassWithName( const char *
name
);Параметры
name
Имя желаемого класса.
Возвращаемое значение
Указатель на недавно выделенный, неинициализированный объект на успехе;
NULL
при отказе.Обсуждение
функция allocClassWithName
-
Выделяет экземпляр именованного OSObject-производного-класса.
Объявление
C++
static OSObject * allocClassWithName( const OSString *
name
);Параметры
name
Имя желаемого класса.
Возвращаемое значение
Указатель на недавно выделенный, неинициализированный объект на успехе;
NULL
при отказе.Обсуждение
функция allocClassWithName
-
Выделяет экземпляр именованного OSObject-производного-класса.
Объявление
C++
static OSObject * allocClassWithName( const OSSymbol *
name
);Параметры
name
Имя желаемого класса.
Возвращаемое значение
Указатель на недавно выделенный, неинициализированный объект на успехе;
NULL
при отказе.Обсуждение
Расширения ядра не должны должны быть использовать эту функцию непосредственно, вместо этого с помощью статических функций, определяемых создания экземпляра классами.
Эта функция консультируется с системой информации о типах во время выполнения для нахождения метакласса для именованного класса. Если это существует, это вызывает метакласс
alloc
функционируйте и возвращает результат. -
Проверьте, является ли данный объект экземпляром класса метакласса получения или одного полученного от него.
Объявление
C++
OSMetaClassBase * checkMetaCast( const OSMetaClassBase *
object
) const;Параметры
object
Объект проверить на наследование.
Возвращаемое значение
object
если это получено из класса получателя,NULL
если нет. -
Ищите иерархию наследования метакласса по имени экземпляр объекта.
Объявление
C++
static OSMetaClassBase * checkMetaCastWithName( const char *
className
, const OSMetaClassBase *object
);Параметры
className
Имя желаемого класса или суперкласса.
object
Объект, метакласс которого начинает поиск.
Возвращаемое значение
object
если это получено изclassName
;NULL
иначе.Обсуждение
Расширения ядра не должны использовать эту функцию непосредственно, вместо этого с помощью
OSDynamicCast
илиOSCheckTypeInst
. -
checkMetaCastWithName (константа OSString *, константа OSMetaClassBase *) - checkMetaCastWithName (константа OSString *, константа OSMetaClassBase *)
Ищите иерархию наследования метакласса по имени экземпляр объекта.
Объявление
C++
static OSMetaClassBase * checkMetaCastWithName( const OSString *
className
, const OSMetaClassBase *object
);Параметры
className
Имя желаемого класса или суперкласса.
object
Объект, метакласс которого начинает поиск.
Возвращаемое значение
object
если это получено изclassName
;NULL
иначе.Обсуждение
Расширения ядра не должны использовать эту функцию непосредственно, вместо этого с помощью
OSDynamicCast
илиOSCheckTypeInst
. -
checkMetaCastWithName (константа OSSymbol *, константа OSMetaClassBase *) - checkMetaCastWithName (константа OSSymbol *, константа OSMetaClassBase *)
Ищите иерархию наследования метакласса по имени экземпляр объекта.
Объявление
C++
static OSMetaClassBase * checkMetaCastWithName( const OSSymbol *
className
, const OSMetaClassBase *object
);Параметры
className
Имя желаемого класса или суперкласса.
object
Объект, метакласс которого начинает поиск.
Возвращаемое значение
object
если это получено изclassName
;NULL
иначе.Обсуждение
Эта функция является основанием времени выполнения Libkern проверяющая тип система. Расширения ядра не должны использовать его непосредственно, вместо этого с помощью
OSDynamicCast
илиOSCheckTypeInst
. -
Проверки, может ли продолжиться текущая работа загрузки kext.
Объявление
C++
static bool checkModLoad( void *
loadHandle
);Параметры
loadHandle
Непрозрачный дескриптор, возвращенный
preModLoad
.Возвращаемое значение
true
если никакие ошибки не являются выдающимися, и система готова обработать больше метаклассов.Обсуждение
Не для использования расширениями ядра.
-
Запланируйте автоматическую разгрузку неиспользованных расширений ядра.
Объявление
C++
static void considerUnloads();
Обсуждение
Эта функция планирует проверку на расширения ядра, которые могут быть автоматически разгружены, аннулировав любой в настоящее время запланированный чек. В то время любые такие kexts без экземпляров C++ Libkern и никаких внешних ссылок разгружены.
Когда соответствие идет неактивное, Набор I/O вызывает эту функцию.
Расширения ядра, определяющие подклассы IOService, приемлемы на автоматическую разгрузку.
(На выпусках Mac OS X до Snow Leopard (10.6), любое расширение ядра, определяющее любой класс C++ Libkern, было приемлемо на автоматическую разгрузку, но которые разгружаются, не вызывал подпрограмму остановки модуля. Расширения ядра Набора Non-I/O, определяющие подклассы C++ Libkern, несомненно, должны будут иметь объявления OSBundleLibraries, гарантирующие, что они не загрузятся на выпусках до Snow Leopard.)
-
Возвращает имя класса C++, которым управляет этот метакласс.
Объявление
C++
const char * getClassName() const;
Возвращаемое значение
Возвращает имя класса C++, которым управляет этот метакласс.
-
Возвращает размер выделения класса C++, которым управляет этот метакласс.
Объявление
C++
unsigned int getClassSize() const;
Возвращаемое значение
Размер выделения класса C++, которым управляет этот метакласс.
-
Возвращает число существующих экземпляров класса метакласса.
Объявление
C++
unsigned int getInstanceCount() const;
Возвращаемое значение
Число существующих экземпляров класса метакласса, плюс 1 для каждого подкласса с любым экземпляром.
-
Возвращает идентификатор пакета расширения ядра, определяющего этот метакласс.
Объявление
C++
const OSSymbol * getKmodName() const;
Возвращаемое значение
Идентификатор пакета расширения ядра, определяющего этот метакласс.
Обсуждение
«Kmod» является более старым сроком для расширения ядра.
-
Ищите метакласс в системе информации о типах во время выполнения.
Объявление
C++
static const OSMetaClass * getMetaClassWithName( const OSSymbol *
name
);Параметры
name
Имя метакласса желаемого класса.
Возвращаемое значение
Указатель на метакласс возражает, если найдено,
NULL
иначе. -
Реализует краткий обзор
getRetainCount
функционируйте для возврата 0.Объявление
C++
virtual int getRetainCount() const;
Возвращаемое значение
Всегда возвраты 0.
Обсуждение
Так как экземпляр OSMetaClass должен остаться существующим столько, сколько его расширение ядра загружается, OSMetaClass не использует подсчет ссылок.
-
Возвращает суперметакласс получателя.
Объявление
C++
const OSMetaClass * getSuperClass() const;
Возвращаемое значение
Возвращает указатель на суперметакласс получения OSMetaClass, или
NULL
для метакласса OSOBJECT. -
Считает экземпляры класса управляемыми этим метаклассом.
Объявление
C++
void instanceConstructed() const;
Обсуждение
Не для использования расширениями ядра.
Каждый неабстрактный класс, наследовавшийся от OSObject, имеет конструктора по умолчанию, вызывающего свой собственный метакласс
instanceConstructed
функция. Этот конструктор определяетсяOSDefineMetaClassAndStructors
макрос, который должны использовать все подклассы OSObject.Если количество экземпляра класса идет от 0 до 1 - т.е. после создания первой инстанции того класса - количество экземпляра суперкласса также постепенно увеличивается. Это распространяет подсчеты ссылок цепочка наследования так, чтобы суперклассы считались как «в использовании», когда подклассы имеют экземпляры.
-
Считает экземпляры класса управляемыми этим метаклассом.
Объявление
C++
void instanceDestructed() const;
Обсуждение
Каждый неабстрактный класс, наследовавшийся от OSObject, имеет деструктор по умолчанию, вызывающий свой собственный метакласс
instanceDestructed
функция. Этот конструктор определяется макросом OSDefineMetaClassAndStructors, который должны использовать все подклассы OSObject.Если количество экземпляра класса идет от 1 до 0 - т.е. после уничтожения последнего экземпляра того класса - количество экземпляра суперкласса также постепенно уменьшается. Когда их подклассы больше не имеют экземпляры, это сокращает «в использовании» количества от суперклассов.
-
Возвраты, имеют ли какие-либо классы, определенные именованным расширением ядра (или их подклассы), существующие экземпляры.
Объявление
C++
static bool modHasInstance( const char *
kextID
);Параметры
kextID
Пакет ID расширения ядра для проверки.
Возвращаемое значение
true
если kext найден и если какой-либо класс определил, которым kext имеет ненулевое количество экземпляра,false
иначе.Обсуждение
Эта функция вызвана, прежде чем статические деструкторы расширения ядра вызываются до разгрузки расширения. Если какие-либо классы все еще имеют экземпляры или подклассы с экземплярами, те классы регистрируются (использование
reportModInstances
) и расширение ядра не быть разгруженным. -
Конструктор для объектов OSMetaClass.
Объявление
C++
OSMetaClass( const char *
className
, const OSMetaClass *superclass
, unsigned intclassSize
);Параметры
className
Струна до, называющая класс C++, который представляет этот OSMetaClass.
superclass
Объект OSMetaClass представление суперкласса класса этого метакласса.
classSize
Размер выделения представленного класса C++.
Обсуждение
Этот конструктор защищен и не может использоваться для инстанцирования OSMetaClass непосредственно, поскольку OSMetaClass является абстрактным классом. Эта функция вызвана во время kext, загружающегося к классам C++ очереди для регистрации. Посмотрите
preModLoad
иpostModLoad
. -
Регистрирует метаклассы, создаваемые во время загрузки расширения ядра.
Объявление
C++
static OSReturn postModLoad( void *
loadHandle
);Параметры
loadHandle
Непрозрачный дескриптор, возвращенный
preModLoad
.Возвращаемое значение
Код ошибки первой ошибки встретился, или
kOSReturnSuccess
если не произошла никакая ошибка.Обсуждение
Не для использования расширениями ядра.
Вызванный после того, как все статические конструкторы в расширении ядра создали метаклассы, эта функция проверки на двойные имена классов, затем регистрирует новые метаклассы под kext ID, с которым вызвали preModLoad, так, чтобы они могли быть динамично выделены и отслеживать их количества экземпляра.
postModLoad
выпускает блокировку, взятуюpreModLoad
. -
Подготавливает систему типа выполнения к созданию новых метаклассов во время загрузки расширения ядра (модуль).
Объявление
C++
static void * preModLoad( const char *
kextID
);Параметры
kextID
Пакет ID kext быть загруженным.
Возвращаемое значение
Непрозрачный дескриптор к контексту загрузки для расширения ядра на успехе;
NULL
при отказе.Обсуждение
Не для использования расширениями ядра.
Подготавливает систему информации о типах во время выполнения, чтобы записать и зарегистрировать метаклассы, создаваемые статическими конструкторами до последующего вызова к
postModLoad
.preModLoad
берет блокировку для обеспечения обработки единственной работы загрузки за один раз; блокировка выпущенаpostModLoad
. Любой OSMetaClass, созданный между этими двумя вызовами функции, будет связан сkextID
. -
Реализует краткий обзор
release
функция, чтобы ничего не сделать.Объявление
C++
virtual void release() const;
Обсуждение
Так как экземпляр OSMetaClass должен остаться существующим столько, сколько его расширение ядра загружается, OSMetaClass не использует подсчет ссылок.
-
Реализует краткий обзор
release(int freeWhen)
функция, чтобы ничего не сделать.Объявление
C++
virtual void release( int
freeWhen
) const;Параметры
freeWhen
Неиспользованный.
Обсуждение
Так как экземпляр OSMetaClass должен остаться существующим столько, сколько его расширение ядра загружается, OSMetaClass не использует подсчет ссылок.
-
Журналы экземпляр значат классы, определенные расширением ядра.
Объявление
C++
static void reportModInstances( const char *
kextID
);Параметры
kextID
Пакет ID расширения ядра для создания отчетов относительно.
Обсуждение
Эта функция распечатывает имена и количества экземпляра любого класса, определенного
kextID
это имеет ненулевое количество экземпляра. Этим вызываютmodHasInstance
помочь диагностировать проблемы, разгружающие расширения ядра. -
Реализует краткий обзор
retain
функция, чтобы ничего не сделать.Объявление
C++
virtual void retain() const;
Обсуждение
Так как экземпляр OSMetaClass должен остаться существующим столько, сколько его расширение ядра загружается, OSMetaClass не использует подсчет ссылок.
-
Реализует краткий обзор
taggedRelease(const void *)
функция, чтобы ничего не сделать.Объявление
C++
virtual void taggedRelease( const void *tag = 0) const;
Параметры
tag
Неиспользованный.
Обсуждение
Так как экземпляр OSMetaClass должен остаться существующим столько, сколько его расширение ядра загружается, OSMetaClass не использует подсчет ссылок.
-
taggedRelease (константа, недействительная *, интервал константы) - taggedRelease (константа, недействительная *, интервал константы)
Реализует краткий обзор
taggedRelease(const void *, cont int)
функция, чтобы ничего не сделать.Объявление
C++
virtual void taggedRelease( const void *
tag
, const intfreeWhen
) const;Параметры
tag
Неиспользованный.
freeWhen
Неиспользованный.
Обсуждение
Так как экземпляр OSMetaClass должен остаться существующим столько, сколько его расширение ядра загружается, OSMetaClass не использует подсчет ссылок.
-
Реализует краткий обзор
taggedRetain(const void *)
функция, чтобы ничего не сделать.Объявление
C++
virtual void taggedRetain( const void *tag = 0) const;
Параметры
tag
Неиспользованный.
Обсуждение
Так как экземпляр OSMetaClass должен остаться существующим столько, сколько его расширение ядра загружается, OSMetaClass не использует подсчет ссылок.
-
Деструктор для объектов OSMetaClass.
Объявление
C++
virtual ~OSMetaClass();
Обсуждение
Эта функция вызвана, когда разгружено расширение ядра, реализующее класс метакласса. Деструктор удаляет все ссылки на класс от системы информации о типах во время выполнения.
OSMetaClass управляет информацией о типах во время выполнения для Libkern и классов C++ Набора I/O.
Объявление
CPlusPlus
Константы
Обсуждение
OSMetaClass управляет информацией о типах во время выполнения для Libkern и классов C++ Набора I/O. Экземпляр OSMetaClass существует для (почти) каждого такого класса C++, отслеживания отношений наследования, поиска класса по имени, количества экземпляра и т.д. OSMetaClass работает почти полностью негласно, и расширения ядра редко должны, если когда-нибудь, должны взаимодействовать непосредственно с OSMetaClass.
Использование расширениями ядра
В то время как расширения ядра rarey взаимодействуют непосредственно с OSMetaClass во время выполнения, они должны зарегистрировать свои классы в системе метакласса с помощью макросов, объявленных здесь. Объявление класса должно использовать один из этих двух макросы перед его первым объявлением функции элемента:
OSDeclareDefaultStructors
- для классов без абстрактных объявлений функции элементаOSDeclareAbstractStructors
- для классов по крайней мере с одним абстрактным объявлением функции элементаOSDeclareFinalStructors
- для классов, которые не должны быть подподдающимися классификации другим kext
Реализация класса должна тогда использовать один из них макросы:
OSDefineMetaClassAndStructors
- для классов без абстрактных объявлений функции элементаOSDefineMetaClassAndAbstractStructors
- для классов по крайней мере с одним абстрактным объявлением функции элементаOSDefineMetaClassAndFinalStructors
- для классов, которые не должны быть подподдающимися классификации другим kext
Классы в расширениях ядра, предназначающихся для использования в качестве библиотек, возможно, должны зарезервировать vtable слоты для сохранения совместимости на уровне двоичных кодов, поскольку добавляются новые функции. Они могут сделать так с ними макросы:
OSMetaClassDeclareReservedUnused
- резервирует vtable слотOSMetaClassDefineReservedUnused
- определяет зарезервированный vtable слот как нереализованную функциюOSMetaClassDeclareReservedUsed
- документы, что теперь используется раньше зарезервированный слотOSMetaClassDefineReservedUsed
- документы, что теперь используется раньше зарезервированный слот
Используйте ограничения
OSMetaClass не должен быть явно разделен на подклассы расширениями ядра (объявить/определить макросы делают это), и при этом расширения ядра не должны вызывать его функции типа выполнения непосредственно.
Функции OSMetaClass нужно считать небезопасными вызвать в основном контексте прерывания.
Защита параллелизма
Расширения ядра не должны в целом взаимодействовать с объектами OSMetaClass непосредственно, вместо этого с помощью макросов типа выполнения. Большая часть интерфейса OSMetaClass предназначается для использования системой информации о типах во время выполнения, обрабатывающей параллелизм и блокирующий внутренне.
Объявление
CPlusPlus