1.在iOS 引用「1.NSObject--- clang编译OC成C++或者C文件」的类:BaseObj
给此类.h文件添加三个方法:
-(void)slBaseInfo;
+(void)slBaseInfoClass;
static void slBaseInfoFunc(BaseObj *obj);
.h 编译时候
// -(void)slBaseInfo;
// +(void)slBaseInfoClass;
static void slBaseInfoFunc(BaseObj *obj);
在@implementation BaseObj 发生变化了
编译成如下代码:
//-(void)slBaseInfo; 转化成
static void _I_BaseObj_slBaseInfo(BaseObj * self, SEL _cmd) {}
//+(void)slBaseInfoClass; 转化成
static void _C_BaseObj_slBaseInfoClass(Class self, SEL _cmd) {}
//一样
static void slBaseInfoFunc(BaseObj *obj){}
这时候就心里有一个问题?如果直接写成下面的方法:
static void slBaseInfoFunc(baseObj * obj) { }
会不会很爽?发现方法列表并有没有添加
2.实例方法列表变化
static struct /*_method_list_t*/ {
unsigned int entsize; // sizeof(struct _objc_method)
unsigned int method_count;
struct _objc_method method_list[1];
} _OBJC_$_INSTANCE_METHODS_BaseObj __attribute__ ((used, section ("__DATA,__objc_const"))) = {
sizeof(_objc_method),
1,
{{(struct objc_selector *)"slBaseInfo", "v16@0:8", (void *)_I_BaseObj_slBaseInfo}}
};
3.class方法列表变化
static struct /*_method_list_t*/ {
unsigned int entsize; // sizeof(struct _objc_method)
unsigned int method_count;
struct _objc_method method_list[1];
} _OBJC_$_CLASS_METHODS_BaseObj __attribute__ ((used, section ("__DATA,__objc_const"))) = {
sizeof(_objc_method),
1,
{{(struct objc_selector *)"slBaseInfoClass", "v16@0:8", (void *)_C_BaseObj_slBaseInfoClass}}
};
4.OBJC_METACLASS_RO方法列表变化
static struct _class_ro_t _OBJC_METACLASS_RO_$_BaseObj __attribute__ ((used, section ("__DATA,__objc_const"))) = {
1, sizeof(struct _class_t), sizeof(struct _class_t),
(unsigned int)0,
0,
"BaseObj",
(const struct _method_list_t *)&_OBJC_$_CLASS_METHODS_BaseObj,
0,
0,
0,
0,
};
4.OBJC_CLASS_RO方法列表变化
static struct _class_ro_t _OBJC_CLASS_RO_$_BaseObj __attribute__ ((used, section ("__DATA,__objc_const"))) = {
0, sizeof(struct BaseObj_IMPL), sizeof(struct BaseObj_IMPL),
(unsigned int)0,
0,
"BaseObj",
(const struct _method_list_t *)&_OBJC_$_INSTANCE_METHODS_BaseObj,
0,
0,
0,
0,
};
网友评论