NSObject isa


title: NSObject isa

一直对NSObject isa理解不是很好,看到个大牛写的博客后,理解很多,在此记录下学习成果,方便日后查看。博客地址 http://xiongzenghuidegithub.github.io/blog/2016/05/17/runtime-part7-object-getclass-yu-object-class-de-qu-bie/

isa指向:对象isa->类,类isa->元类,元类isa->根元类,根元类isa->根元类自己,形成回路
super class:对象super class指向对象super class。元类super class指向super class父类。根元类meta root class指向类NSObject


     // 对象
     @interface NSObject <NSObject> {
     Class isa  OBJC_ISA_AVAILABILITY; // 指向类
     }
     
     // 类
     struct objc_class {
     Class isa  OBJC_ISA_AVAILABILITY; // 指向元类
     
     #if !__OBJC2__
     Class super_class                                        OBJC2_UNAVAILABLE;
     const char *name                                         OBJC2_UNAVAILABLE;
     long version                                             OBJC2_UNAVAILABLE;
     long info                                                OBJC2_UNAVAILABLE;
     long instance_size                                       OBJC2_UNAVAILABLE;
     struct objc_ivar_list *ivars                             OBJC2_UNAVAILABLE;
     struct objc_method_list **methodLists                    OBJC2_UNAVAILABLE;
     struct objc_cache *cache                                 OBJC2_UNAVAILABLE;
     struct objc_protocol_list *protocols                     OBJC2_UNAVAILABLE;
     #endif
     
     } OBJC2_UNAVAILABLE;
     
     // 元类
     struct objc_class {
     Class isa  OBJC_ISA_AVAILABILITY; // 指向root元类
     
     #if !__OBJC2__
     Class super_class                                        OBJC2_UNAVAILABLE;
     const char *name                                         OBJC2_UNAVAILABLE;
     long version                                             OBJC2_UNAVAILABLE;
     long info                                                OBJC2_UNAVAILABLE;
     long instance_size                                       OBJC2_UNAVAILABLE;
     struct objc_ivar_list *ivars                             OBJC2_UNAVAILABLE;
     struct objc_method_list **methodLists                    OBJC2_UNAVAILABLE;
     struct objc_cache *cache                                 OBJC2_UNAVAILABLE;
     struct objc_protocol_list *protocols                     OBJC2_UNAVAILABLE;
     #endif
     
     } OBJC2_UNAVAILABLE;
     
     // root元类
     struct objc_class {
     Class isa  OBJC_ISA_AVAILABILITY; // 指向自己
     
     #if !__OBJC2__
     Class super_class                                        OBJC2_UNAVAILABLE;
     const char *name                                         OBJC2_UNAVAILABLE;
     long version                                             OBJC2_UNAVAILABLE;
     long info                                                OBJC2_UNAVAILABLE;
     long instance_size                                       OBJC2_UNAVAILABLE;
     struct objc_ivar_list *ivars                             OBJC2_UNAVAILABLE;
     struct objc_method_list **methodLists                    OBJC2_UNAVAILABLE;
     struct objc_cache *cache                                 OBJC2_UNAVAILABLE;
     struct objc_protocol_list *protocols                     OBJC2_UNAVAILABLE;
     #endif
     
     } OBJC2_UNAVAILABLE;
     
    Person *person = [[Person alloc] init];
    NSLog(@"person class:%p", [person class]); // 获取到类 objc_class结构体
    NSLog(@"person meta class:%p", object_getClass(person)); // 获取到类 objc_class结构体
    NSLog(@"person meta class:%p", [Person class]); // 获取到元类 objc_class结构体
    NSLog(@"person meta class:%p", object_getClass([person class])); // 获取到元类 objc_class结构体 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,805评论 0 9
  • 转载自https://mp.weixin.qq.com/s/B4Z-7YQ8CMhZ0kCrxe3XAg 欲诚其意...
    碧玉小瑕阅读 3,590评论 1 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,794评论 1 32
  • 原文出处:南峰子的技术博客 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了...
    _烩面_阅读 5,055评论 1 5
  • 欲诚其意者,先致其知;致知在格物。物格而后知至,知至而后意诚。现代汉语词典中将格物致知解释为: "推究事物的原理,...
    金小俊阅读 10,035评论 5 80