[置顶] 浅析objc的消息机制
学习ios的同学都知道ojbc一种runtime的语言,runtime表明函数的真正执行的时候来确定函数执行的。这样的好处就是我们能很灵活的设计我们的代码,也能在看似合法的情况下做一些非常有意思的事情,要了解ios的runtime,我们需要了解ios的类结构,ios所有的类的基类都是NSObject这个类,从这个类来分析ios的runtime机制。
NS_ROOT_CLASS
@interface NSObject <NSObject> {Class isa;
}+ (void)load;+ (void)initialize;
- (id)init;+ (id)new;
+ (id)allocWithZone:(NSZone *)zone;
+ (id)alloc;
- (void)dealloc;- (void)finalize;- (id)copy;
- (id)mutableCopy;+ (id)copyWithZone:(NSZone *)zone NS_AUTOMATED_REFCOUNT_UNAVAILABLE;
+ (id)mutableCopyWithZone:(NSZone *)zone NS_AUTOMATED_REFCOUNT_UNAVAILABLE;+ (Class)superclass;
+ (Class)class;
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
+ (BOOL)conformsToProtocol:(Protocol *)protocol;
- (IMP)methodForSelector:(SEL)aSelector;
+ (IMP)instanceMethodForSelector:(SEL)aSelector;
- (void)doesNotRecognizeSelector:(SEL)aSelector;- (id)forwardingTargetForSelector:(SEL)aSelector NS_AVAILABLE(10_5, 2_0);
- (void)forwardInvocation:(NSInvocation *)anInvocation;
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector;- (BOOL)allowsWeakReference NS_UNAVAILABLE;
- (BOOL)retainWeakReference NS_UNAVAILABLE;+ (NSString *)description;+ (BOOL)isSubclassOfClass:(Class)aClass;+ (BOOL)resolveClassMethod:(SEL)sel NS_AVAILABLE(10_5, 2_0);
+ (BOOL)resolveInstanceMethod:(SEL)sel NS_AVAILABLE(10_5, 2_0);@end
#include <sys/types.h> // for __DARWIN_NULL
#include <Availability.h>
#include <objc/objc-api.h>typedef struct objc_class *Class;
typedef struct objc_object {Class isa;
} *id;
typedef struct objc_method *Method;
typedef struct objc_ivar *Ivar;
typedef struct objc_category *Category;
typedef struct objc_property *objc_property_t;struct objc_class {Class isa;#if !__OBJC2__Class super_class OBJC2_UNAVAILABLE;const char *name OBJC2_UNAVAILABLE;long version OBJC2_UNAVAILABLE;long info OBJC2_UNAVAILABLE;long instance_size OBJC2_UNAVAILABLE;struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;struct objc_method_list **methodLists OBJC2_UNAVAILABLE;struct objc_cache *cache OBJC2_UNAVAILABLE;struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
#endif} OBJC2_UNAVAILABLE;
现在明了了,super_class是其父类的指针,name是类名,version,info,instance_size是表明这个类的信息, ivars是这个类的变量列表,methodLists是函数列表,cache,是一个方法的list的cache,protocols当然是一个protocol的list。
[aObjec performSelector:aSEL]; 当这行代码执行的时候,aObject 首先会去找cache,里头有没有对应函数,如果找不到,会去找methodLists 列表中是否含有对应的函数,如果再没有就会去找 super_class 中的cache,然后..... 继续这样的步骤.......
所以我们现在了解了NSObject 对于消息的发送的基本的机制流程,后续我会介绍NSOject 我们在这个机制上能做的一些事情。
[置顶] 浅析objc的消息机制相关推荐
- 微信支持群消息置顶;博通洽购虚拟机巨头VMware;
微信支持群消息置顶 近日,微信iOS版更新了8.0.22版本,有用户发现,在该版本中,#微信新增群消息置顶功能#.群主或管理员长按需要置顶的消息,在菜单中点击置顶操作.之后消息就会置于群聊天界面的顶部 ...
- Windows 消息机制浅析
Windows 消息机制浅析 1. Windows 的历史 中国人喜欢以史为鉴,而事实也确实是,如果你能知道一件事情的来龙去脉,往往可以更容易地理解事物为什么会表现为当前这样的现状.所以, ...
- 推荐+1置顶+1(分享、讨论、实现)通用软件注册功能之建立有效的软件保护机制...
推荐+1置顶+1(分享.讨论.实现) 通用软件注册功能之建立有效的软件保护机制 众所周知,一些共享软件往往提供给使用者的是一个功能不受限制的限时使用版,在试用期内使用者可以无限制的使用软件的全部功能( ...
- 推荐+1置顶+1(分享、讨论、实现) 通用软件注册功能之建立有效的软件保护机制
推荐+1置顶+1(分享.讨论.实现) 通用软件注册功能之建立有效的软件保护机制 众所周知,一些共享软件往往提供给使用者的是一个功能不受限制的限时使用版,在试用期内使用者可以无限制的使用软件的全部功能( ...
- autojs模仿qq消息列表侧拉置顶删除菜单
牙叔教程 简单易懂 效果展示 思路 使用安卓qq可知, 消息列表每次只能有一个侧拉菜单被打开 autojs版本 9.0.4 你将学到以下知识点 RecyclerView的基本使用 拦截rv的触摸事件 ...
- 金山卫士开源代码----消息机制浅析 (上
博客已迁移至:http://kulv.sinaapp.com/,这里不再使用 金山卫士开源代码----消息机制浅析 (上) 代码地址:http://download.csdn.net/source/3 ...
- 浅析Android中的消息机制
在分析Android消息机制之前,我们先来看一段代码: [java] view plaincopy public class MainActivity extends Activity impleme ...
- 从一个置顶CPT广告学习计算广告设计要点
Outlook > Knowledge > IQ 达芬奇有很高的 IQ,在他的时代构想了很多发明,却不能够实现自己的发明 亨利·福特出生在合适的年代,在福特的时代,他拥有足够知识,得以制造 ...
- 项目1在线交流平台-7.构建安全高效的企业服务-3. Security整合Kafka,ES,Thymeleaf实例-对帖子置顶、加精、删除
文章目录 功能需求 一.置顶.加精.删除帖子功能的实现 1. dao层处理数据 接口定义 sal语句定义 2. service层业务处理 3. Controller层处理按钮事件异步请求 异步请求及k ...
最新文章
- vue 组件以字符串插入_今日分享:vue3多层嵌套组件如何访问到最外层组件的数据?...
- ObjectInputStreamObjectOutputStream工具类
- java hascode
- 云原生存储详解:容器存储与 K8s 存储卷
- 使用tensorflow查询机器上是否存在可用的gpu设备
- 任何抛开业务谈大数据量的sql优化都是瞎扯
- 线性代数知识汇总(转载)
- python类的使用_python类的使用
- PostgreSQL SSL启用与CA证书生成、配置
- CommonLibrary——框架通用工具库
- Unity实现3D物体叠加到摄像头画面上
- [渝粤教育] 广东-国家-开放大学 21秋期末考试物权法10774k1
- PS-elevenday-铅笔工具(颜色替换)
- Python爬虫从入门到精通:(14)验证码识别_Python涛哥
- 尝试docker1.12内置swarm
- 卫星影像去雾与色彩复原
- 京东一元抢宝系统的数据库架构优化
- qq公众号消息是发送到自己服务器,qq公众号屏蔽后还发消息 qq消息被屏蔽了怎么办...
- 航班信息的查询与检索Java,航班信息的查询与检索
- 世界名模刘金金称赞续元金方是国宝,表示:振兴国医,义不容辞