OC_消息机制
2015-12-09 22:46
274 查看
任何数据结构,只要在恰当的位置具有一个指针指向一个class,那么,它都可以被认为是一个对象
在OC中,一个对象所属于哪个类,是由它的isa指针指向的。这个isa指针指向这个对象所属的class
运行原理:
当向OC对象发送消息时,运行时库会根据对象的isa指针找到这个对象所属的类。这个类会包含一个所有实例方法的列表及一个指向superclass的指针以便可以找到父类的实例方法。运行时库会在类的方法列表以及父类们的方法列表中寻找符合这个selector的方法。找到后即运行这个方法。关键点就是类要定义这个要发送给对象的消息
发送消息机制:
一个OC的类其实也是一个对象,就是可以向一个类发送消息
因为每一个OC的类本身也是一个对象。也就是说Class的数据结构必然也是以isa指针开始的在二进制级别上与objc_object是完全兼容的。然后一个类结构的下一个字段一定是一个指向super class的指针(或者指向nil,对于基类来说)
一个类如何定义有很多方法,依赖于你的运行时库版本,但是无论怎样,都是以一个isa作为第一个字段,接着是superclass字段。
为了可以调用类方法,这个类的isa指针必须指向一个包含这些类方法的类结构体:
meta-class是一个类对象的类
当向一个对发送消息时,runtime会在这个对象所属的那个类的方法列表中查找
当向一个类发送消息时,runtime会在这个类的meta-class的方法列表中查找
meta-class存储着一个类的所有类方法。每个类都会有一个单独的meta-class,因为每个类的类方法基本不可能完全相同的
meta-class
meta-class与Class一样,也是一个对象,依旧可以向它发送消息调用函数,自然的,meta-class也会有一个isa指针指向其所属类。所有的基类的meta-class作为他们的所属类。任何NSObject继承体系下的meta-class都使用NSObject的meta-class作为自己所属的类
所有的meta-class使用基类的meta-class作为它们的基类,而基类的meta-class也是属于它自己,也就是基类的meta-class的isa指针指向自己。这是一个完美的闭环
类和meta-class的继承
4000
与一个类使用super_class指针指向自己的父类一样,meta-class的super_class会指向类的super_class的meta-class。一直追溯到基类的meta-class,它的super_class会指向基类自身(万物归根)
整个继承体系中的实例、类和meta-class都派生自继承体系中的基类。对于NSObject继承体系来说,NSObject的实例方法对体系中所有的实例、类和meta-class都是有效的。NSObject的类方法对于体系中所有的类和meta-class都是有效的
总结:
meta-class是类对象的类,每个类都有自己单独的meta-class。所有的类对象并不会属于同一个meta-class。
meta-class要保证类对象具有继承体系中基类的所有实例和类方法,以及继承体系中的所有中间类方法。对于所有NSObject继承体系下的类,NSObject的实例方法和协议方法对它们和它们meta-class的对象都要有效
所有的meta-class使用基类的meta-class作为自己的基类,对于顶层基类的meta-class也是一样,只是它指向本身而已
摘自:http://blog.csdn.net/windyitian/article/details/19810875
任何数据结构,只要在恰当的位置具有一个指针指向一个class,那么,它都可以被认为是一个对象
在OC中,一个对象所属于哪个类,是由它的isa指针指向的。这个isa指针指向这个对象所属的class
运行原理:
当向OC对象发送消息时,运行时库会根据对象的isa指针找到这个对象所属的类。这个类会包含一个所有实例方法的列表及一个指向superclass的指针以便可以找到父类的实例方法。运行时库会在类的方法列表以及父类们的方法列表中寻找符合这个selector的方法。找到后即运行这个方法。关键点就是类要定义这个要发送给对象的消息
发送消息机制:
一个OC的类其实也是一个对象,就是可以向一个类发送消息
因为每一个OC的类本身也是一个对象。也就是说Class的数据结构必然也是以isa指针开始的在二进制级别上与objc_object是完全兼容的。然后一个类结构的下一个字段一定是一个指向super class的指针(或者指向nil,对于基类来说)
一个类如何定义有很多方法,依赖于你的运行时库版本,但是无论怎样,都是以一个isa作为第一个字段,接着是superclass字段。
为了可以调用类方法,这个类的isa指针必须指向一个包含这些类方法的类结构体:
meta-class是一个类对象的类
当向一个对发送消息时,runtime会在这个对象所属的那个类的方法列表中查找
当向一个类发送消息时,runtime会在这个类的meta-class的方法列表中查找
meta-class存储着一个类的所有类方法。每个类都会有一个单独的meta-class,因为每个类的类方法基本不可能完全相同的
meta-class
meta-class与Class一样,也是一个对象,依旧可以向它发送消息调用函数,自然的,meta-class也会有一个isa指针指向其所属类。所有的基类的meta-class作为他们的所属类。任何NSObject继承体系下的meta-class都使用NSObject的meta-class作为自己所属的类
所有的meta-class使用基类的meta-class作为它们的基类,而基类的meta-class也是属于它自己,也就是基类的meta-class的isa指针指向自己。这是一个完美的闭环
类和meta-class的继承
4000
与一个类使用super_class指针指向自己的父类一样,meta-class的super_class会指向类的super_class的meta-class。一直追溯到基类的meta-class,它的super_class会指向基类自身(万物归根)
整个继承体系中的实例、类和meta-class都派生自继承体系中的基类。对于NSObject继承体系来说,NSObject的实例方法对体系中所有的实例、类和meta-class都是有效的。NSObject的类方法对于体系中所有的类和meta-class都是有效的
总结:
meta-class是类对象的类,每个类都有自己单独的meta-class。所有的类对象并不会属于同一个meta-class。
meta-class要保证类对象具有继承体系中基类的所有实例和类方法,以及继承体系中的所有中间类方法。对于所有NSObject继承体系下的类,NSObject的实例方法和协议方法对它们和它们meta-class的对象都要有效
所有的meta-class使用基类的meta-class作为自己的基类,对于顶层基类的meta-class也是一样,只是它指向本身而已
摘自:http://blog.csdn.net/windyitian/article/details/19810875
相关文章推荐
- Android编程之消息机制实例分析
- Objective-C消息机制的原理
- MFC 消息机制简要
- 消息机制和RPC的区别
- Android消息推送机制
- Android学习笔记 day04 _ 网络编程
- Objective-C消息机制的原理
- MFC消息机制初级心得
- ble协议栈cc2540x-1.3.2之通过key处理过程看任务、事件、消息机制
- Windows消息机制概述
- Handler,Looper,MessageQueue,android中的消息机制以及源码分析(一)
- Handler,Looper,MessageQueue,android中的消息机制以及源码分析(二)
- 消息推送(push原理)
- SendMessage、PostMessage原理
- IOS 消息机制(NSNotificationCenter)
- 4_连接服务器的线程,消息机制
- Android中Handler消息机制
- Android手掌抑制功能的实现
- Handler消息机制
- 关于Android中的消息机制和异步