isa和superclass的总结

本文所运行的环境是自己编译好的:配置运行objc4-750和使用
本文所写的项目详见:OCBasicDemo

我们从前面的2节,应该大致对isa、superclass应该有了大致的了解了.

下面是我从网络摘的图:


image
  • 分析:
    • 1.instance(实例对象)的isa指向class(类对象)
    • 2.class(类对象)的isa指向meta-claaa(元类对象)
    • 3.meta-class(元类)的isa指向基类的meta-class
    • 4.class(类对象)的superclass指向父类的class(类对象)
      • 如果没有父类superclass指向nil
    • 5.meta-class(元类)的superclass指向的是父类的meta-class
    • 6.基类的meta-class的superclass指向基类的class
    • 7.instance(实例对象)调用对象的方法:isa找class(类对象),不存在,则通过superclass去找
    • 8.class(类对象)调用类方法:isa找meta-class(元类),不存在,则通过superclass去找

示例:

#import <Foundation/Foundation.h>
@interface NSObject()
+ (void)test;
@end

@implementation NSObject (Test)
- (void)test
{
   NSLog(@"test被调用啦%p", self);
}
@end


@interface Person : NSObject
+ (void)test;
@end

@implementation Person
@end


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"%p", [NSObject class]);//0x100b14140
        NSLog(@"%p", [Person class]);  //0x1000011c0
      
        [NSObject test];//test被调用啦0x100b14140
        [Person test];//test被调用啦0x1000011c0
    }
    return 0;
}

分析:

  • 1.调用:[NSObject test];我们定义了+ test方法,但是在实现里面没有实现该方法,所以就相当于在元类里面没有找到,此时就会通过superclass指针来找,就去NSObject的class类里面找了,发现里面实现了test方法,执行(-test)
  • 2.对于[Person test];也是类似哟

友情链接:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,776评论 0 9
  • 前言:本文简述OC对象、isa和SuperClass,如有错误请留言指正。 Q:OC中对象分类 A:总共为三类:实...
    梦蕊dream阅读 4,155评论 6 16
  • Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的...
    有一种再见叫青春阅读 611评论 0 3
  • iOS底层原理总结 - 探寻OC对象的本质 对小码哥底层班视频学习的总结与记录。面试题部分,通过对面试题的分析探索...
    xx_cc阅读 21,620评论 31 178
  • 一. OC的本质 我们平时编写的Objective-C代码,底层实现其实都是C\C++代码; Objective-...
    蔚尼阅读 442评论 0 1