oc语言中的isa指针以及其面向对象语言的设计原理

面向对象语言:即为:万物皆对象,所以一切的类型都应该是对象或类,但是很多语言都没有完全遵循面向对象的原则。

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指向自己。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值