类的本质及启动过程

1. 【了解】类的本质

2. 【掌握】如何获取类对象

3. 【理解】类对象的用法

4. 【理解】类对象的存储

5. 【了解】OC实例对象类对象元数据之间关系

 

1.类的本质

- 类的本质其实也是一个对象(类对象)

- 程序中第一次使用该类的时候被创建,在整个程序中只有一份。

- 此后每次使用都是这个类对象,它在程序运行时一直存在。

- 类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本,继承层次,以及消息与函数的映射表等

- 类对象代表类,Class类型,对象方法属于类对象

- 如果消息的接收者是类名,则类名代表类对象

- 所有类的实例都由类对象生成,类对象会把实例的isa的值修改成自己的地址,每个实例的isa都指向该实例的类对象

2.如何获取类对象

- 通过实例对象

            格式:[实例对象   class ];

             如:   [dog class];

- 通过类名获取(类名其实就是类对象)

            格式:[类名 class];

            如:[Dog class];

 

3.类对象的用法

- 用来调用类方法

 

[Dog test];

Class c = [Dog class];

[c test];

 

- 用来创建实例对象

 

Dog *g = [Dog new];

Class c = [Dog class];

Dog *g1 = [c new];

 

4.类对象的存储

 

 

5.OC实例对象 类对象 元对象之间关系

- Objective-C是一门面向对象的编程语言。

    + 每一个对象 都是一个类的实例。

    + 每一个对象 都有一个名为isa的指针,指向该对象的类。

    + 每一个类􏰁述了一系列它的实例的特点,包括成员变量的列表,成员函数的列表等。

    + 每一个对象都可以接受消息,而对象能够接收的消息列表是保存在它所对应的类中。

 

- 在Xcode中按Shift + Command + O打开文件搜索框,然后输入NSObject.h和objc.h,可以打开 NSObject的定义头文件,通过头文件我们可以看到,NSObject就是一个包含isa指针的结构体,

下面这张图或许能够 让大家对isa和继承的关系清楚一些

上图中,最让人困惑的莫过于Root Class了。在实现中,Root Class是指

NSObject,我们可以从图中看出:

- NSObject类对象包括它的对象实例方法。

- NSObject的元对象包括它的类方法,例如new方法。

- NSObject的元对象继承自NSObject类。

- 一个NSObject的类中的方法同时也会被NSObject的子类在查找方法时找到

 

 

类的启动过程

 

1. 【掌握】\+load方法

 

2. 【掌握】\+initialize方法

 

 

 

1.\+load方法

 

- 在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法(只会调用一次)

 

- 先加载父类,再加载子类;也就是先调用父类的+load,再调用子类的+load

 

- 先加载元原始类,再加载分类

 

- 不管程序运行过程有没有用到这个类,都会调用+load加载

 

 

 

2.\+initialize

 

- 在第一次使用某个类时(比如创建对象等),只会调用一次+initialize方法

 

- 一个类只会调用一次+initialize方法,先调用父类的,再调用子类的

 

 

 

 

posted @ 2015-11-26 14:55  a滴答  阅读(150)  评论(0编辑  收藏  举报