OCランタイムレコード
6273 ワード
typedef struct objc_method *Method; // Method
typedef struct objc_ivar *Ivar; // Ivar
typedef struct objc_category *Category // category
typedef struct objc_property *objc_property_t; //
struct objc_class {
Class isa
Class super_class
long version
long info
long instance_size
struct objc_ivar_list *ivars //
struct objc_method_list **methodLists //
struct objc_protocol_list *protocols //
}
//
struct objc_method_description {
SEL name ; //
char *types; //
}
//
typedef struct {
const char *name ; //
const char *value ; //
}objc_property_attribute_t;
Class object_getClass(id obj) // Class
Class object_setClass(id obj,Class cls) // obj Class
Bool object_isClass(id obj) ;
const char *object_getClassName(id obj); // obj Class ;
id object_getIvar(id obj,Ivar ivar);// object_getInstanceVariable
void object_setIvar(id obj ,Ivar ivar ,id value )// object_setInstanceVariable
object_setInstanceVariable ARC
/** Class **/
Class objc_getClass(const char* name ) ;
Class objc_getMetaClass(const char* name ) ; //
Class objc_lookUpClass(const char *name) //
class_setVersion(Class cls, int version)
int class_getVersion(Class cls)
size_t class_getInstanceSize(Class cls)
Ivar class_getInstanceVariable(Class cls, const char *name)//
Ivar class_getClassVariable(Class cls ,const char *name) / oc
Ivar *class_copyIvarList(Class cls, unsigned int *outCount) //
Method class_getInstanceMethod(Class cls, SEL name) //
Method class_getClassMethod(Class cls,SEL name) // , , nil
IMP class_getMethodImplementation(Class cls, SEL name) //
IMP class_getMethodImplementation_stret(Class cls, SEL name) //
BOOL class_respondsToSelector(Class cls, SEL sel) //
Method *class_copyMethodList(Class cls, unsigned int *outCount) // ,
BOOL class_conformsToProtocol(Class cls, Protocol *protocol)
Protocol * __unsafe_unretained *class_copyProtocolList(Class cls, unsigned int *outCount) // free()
objc_property_t class_getProperty(Class cls, const char *name) //
objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount) //
BOOL class_addMethod(Class cls, SEL name, IMP imp,
const char *types) // , , NO , , method_setImplemention
IMP class_replaceMethod(Class cls, SEL name, IMP imp,
const char *types) // add_method , method_setImplemention
BOOL class_addIvar(Class cls, const char *name, size_t size, uint8_t alignment, const char *types) after objc_allocateClassPair and before objc_registerClassPair.
BOOL class_addProtocol(Class cls, Protocol *protocol) 、、 , NO
BOOL class_addProperty(Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount) 、、 NO attributes , ,
class_replaceProperty(Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount)
Class objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes) // extraBytes 0
void objc_registerClassPair(Class cls) //
SEL method_getName(Method m) //
IMP method_getImplementation(Method m) //
const char *method_getTypeEncoding(Method m) // ,
unsigned int method_getNumberOfArguments(Method m) //
char *method_copyReturnType(Method m) 、、 。 free()
char *method_copyArgumentType(Method m, unsigned int index) 、、 free()
void method_getReturnType(Method m, char *dst, size_t dst_len)
void method_getArgumentType(Method m, unsigned int index, char *dst, size_t dst_len)
struct objc_method_description *method_getDescription(Method m)
IMP method_setImplementation(Method m, IMP imp) 、、
void method_exchangeImplementations(Method m1, Method m2) //
const char *ivar_getName(Ivar v)
const char *ivar_getTypeEncoding(Ivar v)
const char *property_getName(objc_property_t property)
const char *property_getAttributes(objc_property_t property)
objc_property_attribute_t *property_copyAttributeList(objc_property_t property, unsigned int *outCount)
char *property_copyAttributeValue(objc_property_t property, const char *attributeName)
Protocol *objc_getProtocol(const char *name)
Protocol * __unsafe_unretained *objc_copyProtocolList(unsigned int *outCount)
BOOL protocol_conformsToProtocol(Protocol *proto, Protocol *other)
BOOL protocol_isEqual(Protocol *proto, Protocol *other)
const char *protocol_getName(Protocol *p)
struct objc_method_description protocol_getMethodDescription(Protocol *p, SEL aSel, BOOL isRequiredMethod, BOOL isInstanceMethod) 、、
struct objc_method_description *protocol_copyMethodDescriptionList(Protocol *p, BOOL isRequiredMethod, BOOL isInstanceMethod, unsigned int *outCount)
objc_property_t protocol_getProperty(Protocol *proto, const char *name, BOOL isRequiredProperty, BOOL isInstanceProperty)
objc_property_t *protocol_copyPropertyList(Protocol *proto, unsigned int *outCount)
Protocol * __unsafe_unretained *protocol_copyProtocolList(Protocol *proto, unsigned int *outCount)
Protocol *objc_allocateProtocol(const char *name)
void objc_registerProtocol(Protocol *proto)
void protocol_addMethodDescription(Protocol *proto, SEL name, const char *types, BOOL isRequiredMethod, BOOL isInstanceMethod)
void protocol_addProtocol(Protocol *proto, Protocol *addition)
void protocol_addProperty(Protocol *proto, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount, BOOL isRequiredProperty, BOOL isInstanceProperty)
const char *sel_getName(SEL sel) 、、
// category
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
id objc_getAssociatedObject(id object, const void *key)
void objc_removeAssociatedObjects(id object)