iOS中的对象

这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

今天阳光正好,微风不燥~

真是个唠嗑的好天气~

今天我们唠一唠iOS中的对象

说起对象,老铁们知道iOS中的对象有几种呢~~~

iOS中的三种对象

  1. 实例对象(instance)
  2. 类对象(class)
  3. 元类对象(meta-class)

比如此时我们有两个经典的两个类,Persion继承自NSObject,Student继承自Persion

@interface Persion : NSObject
@property (nonatomic, copy) NSString *name;//占8个字节
@property (nonatomic, assign) int age;//占4个字节
@end

@interface Student : Persion
@property (nonatomic, copy) NSString *teacher;
@end

实例对象

实例对象就是我们通过alloc init 生成的类,比如:

Student *s = [[Student alloc] init];//实例对象

那么实例对象在内存中都存储了那些东西呢?

  1. isa 指针
  2. 成员变量

其中isa指针指向实例对象的类对象,成员变量就是实例对象的属性变量

在当前这个例子中,isa指针指向 Student类,成员变量就只有teacher

类对象

类对象就是我们所说的类,可以通过class方法,或者object_getClass()获得。

image.png 类对象中主要存储了:

  1. isa指针
  2. superClass指针
  3. 类的属性信息(@property)类的对象方法信息
  4. 类的协议信息、类的成员变量信息

其中:

  • isa指针指向元类对象
  • superClass指针指向父类对象,这里Student的父类就是Persion
  • 类的属性信息指的是实例对象的属性信息,这里指teacher的信息
  • 类的对象方法信息就是实例方法信息
  • 类的协议信息就是类准守的协议信息
  • 类的成员变量信息就是对象的成员变量

元类对象

每一个类对象在内存中都有一个元类对象与之对应,可以通过object_getClass()获得

image.png

需要注意的是通过object_getClass()方法获取元类对象是,传参是类对象

那么元类对象中都有什么呢:

  1. isa指针
  2. superClass指针
  3. 类的类方法信息

其中:

  • isa 指针指向根元类,这里就是指向了nsobject的元类
  • superClass 指针指向父类的元类,这里就指向了Persion的元类

放一张经典的图:

图片1.png

图中的SubClass可以看做是Student类,SuperClass可以看做是Persion类,Root class就是NSObject 类

以上就是对iOS中的对象的介绍~~~

猜你喜欢

转载自juejin.im/post/7028968681962995726