---
title: OSMetaClassBase
framework: kernel
role: symbol
role_heading: Class
path: kernel/osmetaclassbase
---

# OSMetaClassBase

OSMetaClassBase is the abstract bootstrap class for the Libkern and I/O Kit run-time type information system.

## Declaration

```occ
class OSMetaClassBase
```

## Overview

Overview OSMetaClassBase is the abstract C++ root class underlying the entire Libkern and I/O Kit class hierarchy. It defines the run-time type information system, including dynamic class allocation and safe type-casting, as well as the abstract interface for reference counting and a few other utility functions. OSMetaClassBase is the immediate superclass of OSObject and OSMetaClass; no other class should derive from OSMetaClassBase. For more information, see Introduction to I/O Kit Device Driver Design Guidelines. Use by Kernel Extensions Kernel Extensions should never interact directly with OSMetaClassBase, but they will find useful several macros that tie in to the run-time type information system, specifically: OSTypeAlloc - allocation of new instances OSDynamicCast - safe type casting OSCheckTypeInst - checking for inheritance/derivation OSMemberFunctionCast - casting C++ member functions to C function pointers for registration as callbacks See OSMetaClass for more run-time type information interfaces. Use Restrictions OSMetaClassBase should not be subclassed by kernel extensions, nor should kernel extensions call its run-time type functions directly. The run-time type functions and macros are not safe to call in a primary interrupt context. Concurrency Protection The run-time type macros and functions of OSMetaClassBase are thread-safe.

## Topics

### Miscellaneous

- [OSCheckTypeInst](kernel/oschecktypeinst.md)
- [OSDynamicCast](kernel/osdynamiccast.md)
- [OSMemberFunctionCast](kernel/osmemberfunctioncast.md)
- [OSSafeRelease](kernel/ossaferelease.md)
- [OSSafeReleaseNULL](kernel/ossafereleasenull.md)
- [OSTypeAlloc](kernel/ostypealloc.md)
- [OSTypeID](kernel/ostypeid.md)
- [OSTypeIDInst](kernel/ostypeidinst.md)
- [checkTypeInst](kernel/osmetaclassbase/1808042-checktypeinst.md)
- [getMetaClass](kernel/osmetaclassbase/1808051-getmetaclass.md)
- [getRetainCount](kernel/osmetaclassbase/1808060-getretaincount.md)
- [isEqualTo](kernel/osmetaclassbase/1808069-isequalto.md)
- [metaCast(const char *)](kernel/osmetaclassbase/1808075-metacast.md)
- [metaCast(const OSMetaClass *)](kernel/osmetaclassbase/1808082-metacast.md)
- [metaCast(const OSString *)](kernel/osmetaclassbase/1808090-metacast.md)
- [metaCast(const OSSymbol *)](kernel/osmetaclassbase/1808095-metacast.md)
- [release()](kernel/osmetaclassbase/1808103-release.md)
- [release(int)](kernel/osmetaclassbase/1808109-release.md)
- [retain](kernel/osmetaclassbase/1808117-retain.md)
- [safeMetaCast](kernel/osmetaclassbase/1808126-safemetacast.md)
- [serialize](kernel/osmetaclassbase/1808135-serialize.md)
- [taggedRelease(const void *)](kernel/osmetaclassbase/1808142-taggedrelease.md)
- [taggedRelease(const void *, const int)](kernel/osmetaclassbase/1808151-taggedrelease.md)
- [taggedRetain](kernel/osmetaclassbase/1808161-taggedretain.md)

### Instance Methods

- [Dispatch](kernel/osmetaclassbase/3181053-dispatch.md)
- [Invoke](kernel/osmetaclassbase/3181056-invoke.md)
- [getMetaClass](kernel/osmetaclassbase/1452550-getmetaclass.md)
- [getRetainCount](kernel/osmetaclassbase/1452539-getretaincount.md)
- [isEqualTo](kernel/osmetaclassbase/1452440-isequalto.md)
- [metaCast](kernel/osmetaclassbase/1452513-metacast.md)
- [metaCast](kernel/osmetaclassbase/3437951-metacast.md)
- [metaCast](kernel/osmetaclassbase/3437952-metacast.md)
- [metaCast](kernel/osmetaclassbase/3437953-metacast.md)
- [operator=](kernel/osmetaclassbase/1452581-operator.md)
- [release](kernel/osmetaclassbase/1452460-release.md)
- [release](kernel/osmetaclassbase/3438210-release.md)
- [retain](kernel/osmetaclassbase/1452494-retain.md)
- [serialize](kernel/osmetaclassbase/1452438-serialize.md)
- [taggedRelease](kernel/osmetaclassbase/1452437-taggedrelease.md)
- [taggedRelease](kernel/osmetaclassbase/3437954-taggedrelease.md)
- [taggedRetain](kernel/osmetaclassbase/1452446-taggedretain.md)

### Type Methods

- [checkTypeInst](kernel/osmetaclassbase/1452569-checktypeinst.md)
- [initialize](kernel/osmetaclassbase/1452472-initialize.md)
- [requiredMetaCast](kernel/osmetaclassbase/3181821-requiredmetacast.md)
- [safeMetaCast](kernel/osmetaclassbase/1452515-safemetacast.md)

## See Also

### Base Types

- [OSSymbol](kernel/ossymbol.md)
- [OSObject](kernel/osobject.md)
- [OSMetaClass](kernel/osmetaclass.md)
- [OSObjectPtr](kernel/osobjectptr.md)
- [OSObjectRef](kernel/osobjectref.md)
- [Additional Types](kernel/libkern/data_types/additional_types.md)
