类的本质

类的本质:

类其实也是一个对象, 这个对象会在这个类第一次被使用的时候创建
只要有了类对象, 将来就可以通过类对象来创建实例对象
实例对象中有一个isa指针, 指向创建自己的类对象
类对象中保存了当前对象所有的对象方法
当给一个实例对象发送消息的时候, 会根据实例对象中的isa指针去对应的类对象中查找

1.如何获取类对象

    // [实例对象 class];  [类名 class];
    Person *p1 = [[Person alloc] init];
    Person *p2 = [[Person alloc] init];
    // 一个类再内存中只有一份类对象
    Class c1 = [p1 class];
    Class c2 = [p2 class];
    Class c3 = [Person class];
    NSLog(@"c1 = %p, c2 = %p, c3 = %p", c1, c2, c3);

2.类对象的应用场景

    // 2.1用于创建实例对象
    Person *p3 = [[c1 alloc] init];
    p3.age = 30;
    NSLog(@"%i", p3.age);
    // 2.2用于调用类方法
    [c1 test];

3.类的启动过程

// 只要程序启动就会将所有类的代码加载到内存中, 放到代码区
// load方法会在当前类被加载到内存的时候调用, 有且仅会调用一次
// 如果存在继承关系, 会先调用父类的load方法, 再调用子类的load方法
+ (void)load
{
    NSLog(@"Person类被加载到内存了");
}

// 当当前类第一次被使用的时候就会调用(创建类对象的时候)
// initialize方法在整个程序的运行过程中只会被调用一次, 无论你使用多少次这个类都只会调用一次
// initialize用于对某一个类进行一次性的初始化
// initialize和load一样, 如果存在继承关系, 会先调用父类的initialize再调用子类的initialize
+ (void)initialize
{
    NSLog(@"Person initialize");
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 今天整理了下自己电脑里的一些碎片笔记,时间有限只整理了这篇文章——类的本质,大家可以进行参考。 1.本质 类...
    VV木公子阅读 2,186评论 3 17
  • 类的本质:类其实也是一个对象, 这个对象会在这个类第一次被使用的时候创建只要有了类对象, 将来就可以通过类对象来创...
    山中石头阅读 363评论 0 0
  • 1.类的本质 类的本质其实也是一个对象(类对象)程序中第一次使用该类的时候被创建,在整个程序中只有一份。此后每次使...
    GSChan阅读 3,116评论 0 13
  • 我快要进入下一段恋情了,只要我说一个好字。我感觉很甜,他对我很好很好啊,又会说甜言蜜语,人也不错,阳光帅气的,还挺...
    李知树阅读 557评论 4 7
  • 不知道为什么到现在还没睡着。那么就来谈谈我的信仰。 我不知道你们都是否有信仰,但是我是一名基督徒。 从小就跟着爷爷...
    d46ca12478f0阅读 233评论 1 4