首先如果面试官问你:NSObject对象有哪几种类型?
实例对象(instance)、类对象(class)、元类对象(meta-class)三种。
实例对象就不说了,接下来我们探究类对象
提问:一个NSObject类对象有几个?
请看下面代码:
![](https://img.haomeiwen.com/i3291334/2b1aaa453e3c0696.jpeg)
从上面执行的代码可以看出,5个输出的结果一摸一样,实际上
他们都是一个对象,每个类在内存中有且只有一个class对象。
提问:一个NSObject元类对象有几个?
请看下面的代码:
![](https://img.haomeiwen.com/i3291334/a77cf0e2fe7226ba.jpeg)
从上面执行的代码可以看出,5个输出的结果一摸一样,实际上
他们都是一个对象,每个类在内存中有且只有一个元类对象。
延展提问:每个对象的内存中会存储对象方法或类方法吗?
答:不会的,因为只有一份就够了,每个对象都保存一份,明显浪费内存😄!
提问:class对象在内存中存储的信息主要包括哪些?
1.isa指针
2.superclass指针
3.类的属性信息(@property),类的对象方法(instance method)
4.类的协议信息(protocol)、类的成员变量信息(iver)
...
提问:meta-class对象在内存中存储的信息主要包括哪些?
1.isa指针
2.superclass指针
3.类的类方法信息
...
其实啊,类对象和元类对象保存的信息的结构都是一样的,只是对于另外一个存储的是空而已,比如对于类对象里面也会存储类方法信息,只是为空,所以大家可以认为,元类对象内存主要存类方法信息,其他是类对象的内存存储的!这也巧妙的看到苹果设计内存的巧妙性,每个类方法和对象方法在其内存上只会保存一次!
如果觉得我写得还行,请关注我,我会持续更新其他iOS底层方法的知识点😄
网友评论