iOS运行时编程(Runtime Programming)和Java的反射机制对比
来源:互联网 发布:echarts.js下载 编辑:程序博客网 时间:2024/05/10 10:17
运行时进行编程,类似Java的反射。运行时编程和Java反射的对比如下:
1.相同点
都可以实现的功能:获取类信息、属性设置获取、类的动态加载(NSClassFromString(@“className”))、方法的动态调用
下面是iOS中涉及到的相关使用方法
类的动态加载:NSClassFromString(@“className”),方法的动态调用:NSSelectorFormString(@”doSonethingMethod:”)
常见的方法:
isKindOfClass: isMemberOfClass: ; respondsToSelector: ; conformsToProtocol: ; methodForSelector: (提供实现方法的地址)
给对象发消息的格式:[receiver message]
objc_msgSend(receiver,selector)
objc_msgSend(receiver,selector,arg1,arg2,…)
动态方法解决:@dynamic propertyName;
消息转发: 消息negotiate负责转发
- negotiate
{
if ( [someOtherObject respondsTo:@selector(negotiate)] )
return [someOtherObject negotiate];
return self;
}
2.不同点:objective-c能动态的给class添加类和方法,Java 则不行。例如:
下面是iOS中涉及到的相关使用方法
API
Class newClz =objc_allocateClassPair([NSError class],”RuntimeErrorSubclass”,0);
class_addMethod(newClz,@selector(retort), (IMP)ReportFunction, “v@:”);
shiyongobjc_allocateClassPair动态函数创建一个类,并在参数中指明该类的父类和类名。用class_addMethod函数为该类增加了一个方法report,这个方法是由函数ReportFunction实现的,由于该函数至少应包含两个参数self和_cmd,因此该方法有3个参数,类型分别为v、@、:(一个返回值,self,_cmd)。
3.深层次对比
动态机制:Objective-C runtime 对 class method 的调用是通过全局名称查询。而 Java VM 是通过类似 C++ 的虚表机制。所以 Objective-C 能动态的给 class 添加方法,Java 则不行。
- iOS运行时编程(Runtime Programming)和Java的反射机制对比
- iOS运行时编程(Runtime Programming)和Java的反射机制对比
- iOS开发之运行时编程(Runtime Programming)浅读
- iOS学习笔记10—Objective-C的运行时编程(Runtime Programming)
- iOS学习笔记10—Objective-C的运行时编程(Runtime Programming)
- Objective-C的运行时编程(Runtime Programming)
- Objective-C的运行时编程(Runtime Programming)
- Objective-C的运行时编程(Runtime Programming)
- android 中的反射机制和java的对比
- [运行时]Objective-C的运行时编程(Runtime Programming)
- IOS 运行时(runtime)机制
- Swift/Objc的Runtime(运行时)机制
- 使用java反射机制运行时进行Map和POJO的互相转换
- 使用java反射机制运行时进行Map和POJO的互相转换
- iOS运行时 runtime
- iOS runtime 运行时
- IOS runtime运行时
- iOS--RunTime运行时
- OS X 10.11 cocoapods
- 第三十四篇:Quartz2D绘图
- LeetCode---Spiral Matrix
- git 配置自动补全
- 手游延迟问题
- iOS运行时编程(Runtime Programming)和Java的反射机制对比
- 学习笔记Cocos2d-x之内存管理
- C++邻接矩阵创建图及深度、广度遍历
- .net之session(例程)
- 0007主项定理Master Method
- postgresql软件创建表或者存储过程时候卡死
- php使用gzip压缩传输js和css文件的方法
- mysql 查看表的类型
- 获取应用的IP,端口等