iOS底层学习-day-2

前言-OC语法篇

我是一名iOS开发者, iOS底层 菜鸟的进阶之路30天。

问题

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

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

OC的三种对象的介绍

  • instance对象(实例对象)
//object1 存储的地址值就是[[NSObject alloc]init]实例的isa的地址,指向这个实例对象
NSObject *object1 = [[NSObject alloc]init];

NSObject *object2 = [[NSObject alloc]init];
  • object1、object2是NSObject的instance对象(实例对象),它们是不同的两个对象,分别占据着两块不同的内存
    • instance对象在内存中存储的信息包括:
      • isa指针
      • 其他成员变量
  • class对象(类对象)
  • 类方法信息
    在这里插入图片描述
NSObject *object1 = [[NSObject alloc] init];
NSObject *object2 = [[NSObject alloc] init];
        
Class objectClass1 = [object1 class];
Class objectClass2 = [object2 class];
Class objectClass3 = object_getClass(object1);
Class objectClass4 = object_getClass(object2);
Class objectClass5 = [NSObject class];
        
NSLog(@"%p %p",object1,object2);
        
NSLog(@"%p %p %p %p %p",
              objectClass1,
              objectClass2,
              objectClass3,
              objectClass4,
              objectClass5);// 五个都是同一个类对象
  • 一个类只有一个类对象
    • instance对象在内存中存储的信息包括:
      • isa指针 //类的isa指针和实例不一样
      • superclass指针
      • 类的属性信息(@property)
      • 类的对象方法信息(instance method)//比如 - (void)eat;
      • 类的协议信息(protocol)
      • 类的成员变量信息(ivar)//比如 int ,double
  • meta-class对象(元类对象)
  • 元类和类方法信息的对比
    在这里插入图片描述
// meta-class对象,元类对象
// 将类对象当做参数传入,获得元类对象
Class objectClass5 = [NSObject class];
Class objectMetaClass = object_getClass(objectClass5);//元类对象
Class objectMetaClass2 = [[[NSObject class] class] class];//永远是类对象
  • 每个类在内存中有且只有一个meta-class对象
  • meta-class对象和class对象的内存结构是一样的,但是用途不一样,在内存中存储的信息主要包括:
    • isa指针
    • superclass指针
    • 类的类方法信息(class method)

Runtime中的 objc_getClass() 和 object_getClass()区别

  • objc_getClass(“Person”)
    • Class objc_getClass(const char *aClassName)
      • 传入字符串类名
      • 返回对应的类对象
  • object_getClass(id obj) 更常用
    • 传入的obj可能是instance对象、class对象、meta-class对象
    • 返回值:
      • 如果是instance对象,返回class对象
      • 如果是class对象,返回meta-class对象
      • 如果是meta-class对象,返回NSObject(基类)的meta-class对象
发布了12 篇原创文章 · 获赞 0 · 访问量 120

猜你喜欢

转载自blog.csdn.net/weixin_41732253/article/details/103692801