美文网首页
iOS 3.NSObject---(类添加方法) clang编

iOS 3.NSObject---(类添加方法) clang编

作者: 龙之天下 | 来源:发表于2019-10-27 17:40 被阅读0次

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, 
};

相关文章

网友评论

      本文标题:iOS 3.NSObject---(类添加方法) clang编

      本文链接:https://www.haomeiwen.com/subject/daoyvctx.html