面向对象语言:即为:万物皆对象,所以一切的类型都应该是对象或类,但是很多语言都没有完全遵循面向对象的原则。
eg:ruby中int类型都是类型,所以都是对象,严格的面向对象类型;而oc中int,double都是基本的数据类型,并不是面向对象的类型,所以没有完全遵循面向对象的理念。
不过oc语言大多都是遵循的,并且我们经常使用的来概念。
有必要了解一下面向对象语言的设计原理:
必须了解一下对象或者类中的一个属性isa指针。
上面就是基本的类和元类之间的关系 和 oc语言中的元类之间的继承关系。
总结:(图一)
1、每一个对象本质上都是一个类的实例。其中类定义了成员变量和成员方法的列表。对象通过对象的isa指针指向类
2、每一个类本质上都是一个对象,类其实是元类(meteClass)的实例。元类定义了类方法的列表。类通过类的isa指针指向元类。
3、所有的元类最终继承一个根元类,根元类isa指针指向本身,形成一个封闭的内循环。
(图二)
1、NSObject的类定义了实例方法,eg:- (id)init 方法 - (void)dealloc 方法
2、NSOBject的元类定义了类方法,eg:+(id)alloc方法、+(void)load 方法和 +(void)initialize方法。
3、NSObject的元类继承NSObject类,所以NSObject类是所有类的根,因此NSObject中定义的实例方法可以被所有的对象调用,eg:- (id)init 方法 - (void)dealloc 方法
4、NSObject的元类的isa指向自己。