Objective-C 碎碎念 5

2017-08-23  本文已影响0人  大地瓜123

本文为大地瓜原创,欢迎知识共享,转载请注明出处。
虽然你不注明出处我也没什么精力和你计较。
作者微信号: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);
//一个类在内存中只有一个类对象
类对象的输出.png

类对象能用来干嘛呢?

创建实例对象

Person *p3 = [[c1 alloc] init];

调用类方法

[c1 test];

其实类对象的使用方法和类名是一样的。

类的加载逻辑

当程序启动时,所有的类代码就会加载到内存中
load方法会在当前类被加载到内存时调用,且只会调用一次
如果存在继承关系,则会先调用父类的load方法,在调用子类的load方法(此时类对象还没有创建,只是类代码加载到了内存中)

当前类第一次使用到的时候回调用initialize方法(也就是创建类对象时)
initialize方法只会被调用一次
initialize方法用于对某个类进行一次性的初始化
如果存在继承关系,则会先调用父类的initialize方法,在调用子类的initialize方法

上一篇 下一篇

猜你喜欢

热点阅读