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)