阅读 260

深入探究NSObject对象

首先如果面试官问你:NSObject对象有哪几种类型?

实例对象(instance)、类对象(class)、元类对象(meta-class)三种。

实例对象就不说了,接下来我们探究类对象

提问:一个NSObject类对象有几个?

请看下面代码:

从上面执行的代码可以看出,5个输出的结果一摸一样,实际上

他们都是一个对象,每个类在内存中有且只有一个class对象。

提问:一个NSObject元类对象有几个?

请看下面的代码:

从上面执行的代码可以看出,5个输出的结果一摸一样,实际上

他们都是一个对象,每个类在内存中有且只有一个元类对象。

延展提问:每个对象的内存中会存储对象方法或类方法吗?

答:不会的,因为只有一份就够了,每个对象都保存一份,明显浪费内存😄!

提问:class对象在内存中存储的信息主要包括哪些?

1.isa指针

2.superclass指针

3.类的属性信息(@property),类的对象方法(instance method)

4.类的协议信息(protocol)、类的成员变量信息(iver)

...

提问:meta-class对象在内存中存储的信息主要包括哪些?

1.isa指针

2.superclass指针

3.类的类方法信息

...

其实啊,类对象和元类对象保存的信息的结构都是一样的,只是对于另外一个存储的是空而已,比如对于类对象里面也会存储类方法信息,只是为空,所以大家可以认为,元类对象内存主要存类方法信息,其他是类对象的内存存储的!这也巧妙的看到苹果设计内存的巧妙性,每个类方法和对象方法在其内存上只会保存一次!

如果觉得我写得还行,请关注我,我会持续更新其他iOS底层方法的知识点😄

文章分类
iOS
文章标签