ios中isa指针
来源:互联网 发布:随意裁剪图片软件 编辑:程序博客网 时间:2024/05/12 13:44
isa指针:
OC是一门面向对象的语言,每一个对象都是类的一个实例。在objective-c语言的内部,每一个对象都有一个isa指针,指向该指针的类。每一个类描述了一系例他的实例的特点,包括成员变量的列表,成员函数的列表。每一个对象都可以接收消息,而对象接收消息列表保存在他所对应的类中。
当我们初始化一个对象的时候,是怎么发送消息的
NSObject *obj=[[NSObject alloc] init];
调用方法,其实是给对象发送消息,在编译时这句话会翻译成一个C的函数调用,即:
objc_msgSend(objc_msgSend([NSObject class],@selector(alloc)),@selector(init));
使用这个函数的需要引入头文件:
#import <objc/message.h>
那不是把 OC代码转换成C。c语言函数在调用编译的时候就会决定调用哪个函数,而oc是一种动态语言,他会尽可能把代码的从编译链接是推迟到运行时,这就是oc运行时多态。
给一个对象发送消息,并不会立即执行,而是在运行的时候在去寻找他对应的实现
在Xcode中打开,NSObject.h和objc.h,我们可以看到,NSObject就是一个包含isa指针的结构体,按照面向对象的设计原则,所有的事物都应该是对象,所以严格的说oc并不是完全面向对象的(应为含有int double 类型的变量)。在oc语言中,每一个类实际上也是一个对象。每一个类也有一个isa指针。每一个类也可以接收消息,例如代码[NSObject alloc],就是向NSObject这个类发送名为 “alloc” 的消息。
在oc中,因为类也是一个对象,所以也必须是另外一个类的实例,这个类就是元类(metaclass)。元类保存了类方法的列表。当一个类方法被调用的时候,元类会首先查找他本身是否有该方法的实现,如果没有,则元类会向他的父类查找方法,这样就可以一直找到继承链的头。
元类也是一个对象,元类的isa指针又指向哪里呢?为了设计的完整性,所有的元类的isa指针都会指向一个根元类。根元类的isa指针又会指向他自己,这样就形成了一个闭环。
- ios中isa指针
- iOS中isa指针
- iOS中Cocoa框架·Runtime及isa指针知识
- iOS开发isa 指针 与 runtime 机制
- ISA指针
- isa 指针
- isa指针
- iOS开发关于oc运行时 isa指针详解
- iOS开发关于oc运行时 isa指针详解
- class 的isa指针
- 神秘的 isa 指针
- isa指针的理解
- iOS 中得isa 和self 的详解
- iOS isa 浅析
- iOS isa 浅析
- [转]iOS isa 浅析
- ios isa 是什么鬼???
- OC-底层实现isa指针
- SQL行列互换
- Chapter 9 Dictionaries Assignment 9.4
- spring boot 用maven搭建第一个RESTful Web 服务
- mysql的存储过程,视图的创建
- BASE64编码工具类
- ios中isa指针
- Java实现求最长增长子序列长度,并输出该子序列值
- 初学unity3D小结
- APP UI Design ——sketch(二)
- 蚁群算法代码
- NS_DESIGNATED_INITIALIZER 正确编写Designated Initializer的几个原则
- 神奇的CSS技巧探秘——关于边框特效
- Java反射
- 创建初始上下文