美文网首页
Objective-C对象的分类与isa指针

Objective-C对象的分类与isa指针

作者: Y_van | 来源:发表于2018-08-30 09:36 被阅读7次

OC对象的分类

Objective-C中的对象,简称OC对象,主要可以分为3种

  • instance对象(实例对象)
  • class对象(类对象)
  • meta-class对象(元类对象)

instance

概念:instance对象就是通过类alloc出来的对象,每次调用alloc都会产生新的instance对象

instance获取方式:

NSObjcet *object1 = [[NSObjcet alloc] init];
NSObjcet *object2 = [[NSObjcet alloc] init];
// 打印地址可发现分别占据着两块不同的内存

特性:object1和object2都是NSObject的instace对象(实例对象),
但他们是不同的两个对象,并且分别占据着两块不同的内存。

instance对象在内存中存储的信息包括:

  1. isa指针
  2. 其他成员变量

为什么所有成员变量里都有isa?

答,因为OC类都继承自NSObject

class对象

类对象特性:一个类的类对象是唯一的,在内存中是同一个的。

类对象获取方式:


Class objectClass1 = [object1 class];
Class objectClass2 = [object2 class];
Class objectClass3 = [NSObject class];

// runtime
Class objectClass4 = object_getClass(object1);
Class objectClass5 = object_getClass(object2);

//验证类对象是唯一的。存储的地址都是唯一的
NSLog(@"%p %p %p %p %p", objectClass1, objectClass2, objectClass3, objectClass4, objectClass5);

class对象在内存中存储的信息主要包括

  1. isa指针
  2. superclass指针
  3. 类的属性信息(@property),类的成员变量信息(ivar)
  4. 类的对象方法信息(instance method),类的协议信息(protocol)
  5. ……

meta-class

元类对象获取方式:

//runtime中传入 类对象 此时得到的就是元类对象
Class objectMetaClass = object_getClass([NSObject class]);
class_isMetaClass(objectMetaClass) // 判断该对象是否为元类对象

特性:每个类在内存中有且只有一个meta-class对象
作用:存放了类方法。而class存放 类的对象方法

meta-class对象在内存中存储的信息主要包括:

  1. isa指针
  2. superclass指针
  3. 类的类方法的信息(class method)
  4. ……

除了类方法,meta-class对象和class对象的内存结构是一样的

isa 指针

在调用方法时,isa的作用:

  • 找到class类,最后找到对象方法

  • 找到meta-class元类,最后找到类方法

  1. instance的isa指向class,当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用。
  2. class的isa指向meta-class
    当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用

相关文章

  • OC对象的本质(下)

    iOS | OC对象本质 | Objective-C OC对象的分类,对象的isa指针指向哪里,superClas...

  • Runtime(一)

    一、isa指针 1、在Objective-C对象的分类中说过无论是instance对象、class对象还是meta...

  • Objective-C 对象的本质 02 - isa、super

    Objective-C 对象的本质 02 - isa、superclass Objective-C 对象的分类 I...

  • iOS底层原理之isa指针

    isa指针 在Objective-C中,实例对象的isa指向类对象,类对象的isa指向元类对象.其实这样说是有一些...

  • Objective-C对象的分类与isa指针

    OC对象的分类 Objective-C中的对象,简称OC对象,主要可以分为3种 instance对象(实例对象) ...

  • OC底层03:isa分析

    每一个Objective-C对象都与一个isa指针绑定,那这个isa又是如何与对象进行绑定的呢。 clang 要知...

  • 1.8、iOS面试题之语法

    1、isa指针?(对象的isa,类对象的isa,元类的isa都要说) 对象的isa指针指向所属的类 类的isa指针...

  • Objective-C isa 指针 与 runtime 机制文

    一.isa指针 要认识什么是isa指针,我们得先明确一点: 在Objective-C中,任何类的定义都是对象。类和...

  • Objective-C isa 指针 与 runtime 机制

    一.isa指针 要认识什么是isa指针,我们得先明确一点: 在Objective-C中,任何类的定义都是对象。类和...

  • isa指针

    一.isa指针 要认识什么是isa指针,我们得先明确一点: 在Objective-C中,任何类的定义都是对象。类和...

网友评论

      本文标题:Objective-C对象的分类与isa指针

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