本文为大地瓜原创,欢迎知识共享,转载请注明出处。
虽然你不注明出处我也没什么精力和你计较。
作者微信号:christgreenlaw
本节主要学习了对OC类的分析。
类的本质
类在OC中也是一个对象,这个类对象会在类第一次被使用时创建。
有了类对象后,可以通过类对象来创建实例对象。
实例对象中有一个isa
结构,指向自己的类对象。
类对象中保存了该类的所有对象方法,当给一个实例对象发送消息时,会到实例对象isa
指针对应的类对象中查找。
若要获取类对象,则向类名或者实例对象发送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);
//一个类在内存中只有一个类对象
类对象能用来干嘛呢?
创建实例对象
Person *p3 = [[c1 alloc] init];
调用类方法
[c1 test];
其实类对象的使用方法和类名是一样的。
类的加载逻辑
当程序启动时,所有的类代码就会加载到内存中
load
方法会在当前类被加载到内存时调用,且只会调用一次
如果存在继承关系,则会先调用父类的load
方法,在调用子类的load
方法(此时类对象还没有创建,只是类代码加载到了内存中)
当前类第一次使用到的时候回调用initialize
方法(也就是创建类对象时)
initialize
方法只会被调用一次
initialize
方法用于对某个类进行一次性的初始化
如果存在继承关系,则会先调用父类的initialize
方法,在调用子类的initialize
方法