iOS 对象模型
来源:互联网 发布:暴力摩托2004mac 编辑:程序博客网 时间:2024/05/23 11:52
前面写了一点关于runtime的swizzling,其实也是对象模型的一部分,今天就来详细讲一下ios的对象模型。
那么什么叫对象模型呢,按照面向对象的设计原则来说,所有的事物都是对象,(iOS还是允许存在一些基本的数据类型,所以并没有严格遵守面向对象),同时对象也应该是另一个对象生成的实例。比如一个类生成一个实例,这个实例就叫做这个类的对象,也叫实例对象,那么问题来了,类是不是也是对象呢?iOS中有一个叫做元类的特殊类(meta class),所以类也是对象,它是元类的实例。那么元类又是谁的实例呢?所有的元类是根元类的实例,而根元类又是它自己的实例,这样就造成了一个循环,所有的都变成了对象。每一个对象都有一个isa指针,指明它是谁的对象。
那么我们再来看继承关系,既然是面向对象,那么肯定会有继承关系的,类和类(Class)之间的继承我们都知道(iOS是单继承,最后继承根类Root Class),那么我们刚才说的元类,根元类又是继承谁呢?元类继承于元类(Meta Class),最后继承根元类(Root Meta Class),然后根元类(Root Meta Class)又继承根类(Root Class)。好像有点绕了,看下面这张图:
这样是不是就很清晰了。
那么我们知道每个对象都有一个isa的指针,这样有什么用呢?当你通过一个实例对象想要调用一个类的实例方法或者属性的时候,这个实例对象就会通过isa指针到类里面去找相应的方法或者属性(没找到就会到父类找),相应的如果想要调用一个类的类方法时,是通过类的isa指针到元类中去找的(也就是说元类保存了类的类方法),这也是为什么实例对象不能调用类方法,而类方法需要用类名调用的原因了。
- iOS 对象模型
- iOS-OC对象模型
- IOS中将字典转成模型对象
- iOS——plist对象转模型
- ios ---对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- IOS将字典转换成模型对象
- IOS开发之——Core Text对象模型
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios中 继承对象模型的归档实现
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- ios数据存储之--模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- 对象模型~
- 对象模型
- 对象模型
- 对象模型
- 对象模型
- 对象模型
- 第一代程序员王小波
- ajax基础
- 程序员赚钱之道
- ios读取txt文件并存入数组
- python urllib2模块
- iOS 对象模型
- Spring @Order 无效问题
- SQL Server 2012 安装注意事项
- java对redis的基本操作
- iOS页面之间切换
- 两会政协报告A股解读法
- 计算机字符与编码总结
- document.ready和onload的区别----JavaScript文档加载完成事件
- Checking Code Signing and Sandboxing Status in Code