objective-c中提供类似JAVA的反射特性,给出基本例子如下:

#import <Foundation/Foundation.h>@interface ClassA : NSObject{int _id1;int _id2;int _id3;
}@property int _id1;
@property int _id2;
@property int _id3;-(void) setId1:(int)id1 andId2:(int)id2 andId3:(int)id3;
-(void) doMethod1;
-(void) doMethod2;
-(void) doMethod3;@end@implementation ClassA@synthesize _id1,_id2,_id3;-(void) setId1:(int)id1 andId2:(int)id2 andId3:(int)id3{_id1 = id1;_id2 = id2;_id3 = id3;
}-(void) doMethod1{NSLog(@"%i", self._id1);}-(void) doMethod2{NSLog(@"%i", self._id2);}-(void) doMethod3{NSLog(@"%i", self._id3);}@endint main(int argc, const char * argv[]) {@autoreleasepool {Class class = NSClassFromString(@"ClassA"); //通过字符串获取CLASSNSLog(@"%@", [class className]); //打印class的名称,在oc中class是一个结构体NSObject *tmp;SEL sel1 = @selector(doMethod2); //SEL对应选择一个方法SEL sel2 = NSSelectorFromString(@"doMethod1");SEL sel3 = NSSelectorFromString(@"setId1:andId2:andId3:");tmp = [[class alloc]init]; //判断实例中是否包含这个方法,类似的还有是否属于某一个类等接口if([tmp respondsToSelector:sel3] == YES) {        //oc中反射的基本函数performSelector不支持传入基本参数,如int,以及多个参数,解决的方法有很多种,            //比如可以在设计中就将参数进行封装,下面这个方法是通过NSInvocation传入参数;NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[tmp methodSignatureForSelector:sel3]];[inv setSelector:sel3];[inv setTarget:tmp];//arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocationint input1 = 1;int input2 = 2;int input3 = 3;[inv setArgument:&(input1)  atIndex:2]; //第一个参数传入[inv setArgument:&(input2)  atIndex:3]; //第二个参数传入[inv setArgument:&(input3)  atIndex:4]; //第三个参数传入[inv invoke];}[tmp performSelector:sel1 withObject:nil]; //执行该方法if([tmp respondsToSelector:sel2] == YES) {[tmp performSelector:sel2 withObject:nil];}}return 0;
}

转载于:https://www.cnblogs.com/Fredric-2013/p/4297003.html

objective-c(反射)相关推荐

  1. 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射

    一. Objective-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber : -- 通用包装类 NSValue : NSValue 包装单个 short, i ...

  2. 【iOS 开发】Objective-C 运算符

    博客地址 : http://blog.csdn.net/shulianghan/article/details/41624613 参考文章 : 1.[iOS 开发]Object-C 运算符 2.[iO ...

  3. Objective c类的初始化

    Objective c中实现类的初始化要先重载父类的init方法: 1.首先调用[super init]使用父类的方法进行初始化.将对象赋给self 2.假设self不为nil即父类初始化成功,接着进 ...

  4. Java 反射 (快速了解反射)

    反射的概念 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java ...

  5. Python Day26:多态、封装、内置函数:__str__、__del__、反射(反省)、动态导入模块...

    ## 多态 ```python OOP中标准解释:多个不同类型对象,可以响应同一个方法,并产生不同结果,即为多态 多态好处:只要知道基类使用方法即可,不需要关心具体哪一个类的对象实现的,以不变应万变, ...

  6. [AutoMapper]反射自动注册AutoMapper Profile

    AutoMapper 帮我我们方便管理物件跟物件之间属性值格式转换 模型转换 这里有两个类别 UserInfoModel 当作我们从DB捞取出来模型资料 public class UserInfoMo ...

  7. 2022-2028年中国反射偏光膜行业市场研究及前瞻分析报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了反射偏光膜行业相关概述.中国反射偏光膜行业运行环境.分析了中国反射偏 ...

  8. Go 学习笔记(39)— Go 反射

    本文参考 http://c.biancheng.net/golang/reflect/ 反射是把双刃剑,功能强大但代码可读性并不理想,若非必要并不推荐使用反射. 1. 反射概念 反射是指在程序运行期对 ...

  9. PHP的Reflection反射机制

    原文地址: http://www.nowamagic.net/php/php_Reflection.php PHP5添加了一项新的功能:Reflection.这个功能使得程序员可以 reverse-e ...

  10. Objective C内存管理之理解autorelease------面试题

    Objective C内存管理之理解autorelease Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Aut ...

最新文章

  1. 2020 诺贝尔奖「第一棒」:英美三位科学家摘得桂冠!
  2. 强大的vim配置,让编程更随意
  3. Visual Studio跨平台开发Xamarin
  4. 转载:cin总结附带string输入总结
  5. Mac OS X Leopard 10.5.5 安裝手记 (Dell D830)
  6. java json转xml_关于JSON与XML的区别比较
  7. 注册表屏蔽IE9更新
  8. Eclipse创建Java项目时提示Open Associated Perspective?
  9. 自己写的一个分享按钮的插件(可扩展,内附开发制作流程)
  10. 计算机金融学校排名2015,金融学院2015级各专业排名情况统计表
  11. (四)C++游戏开发-本地存储-二进制文件读写
  12. 基于RPA的自动化测试研究
  13. 关于结构方程模型SEM评价指标
  14. 去掉SecureCRT菜单栏上的打印按钮
  15. Word中自己制作三线表样式,为论文撰写提高效率!
  16. Linux网络之DHCP
  17. SQL server 数据库表的配置及其表的导入导出
  18. GameFramework源码学习(一)
  19. 总结定时器设计方法_空调冷热水系统的设计方法技巧总结,比教科书还实用
  20. 沪江前端由H5页面引起的一场前端数据结构讨论 1

热门文章

  1. oc 默认属性关键词
  2. Xamarin.Forms的滚动视图ScrollView
  3. UIPickerView隐藏透明条
  4. 苹果手机换了屏显示无服务器,苹果将​​为存在显示问题的iPhone 11提供免费更换...
  5. java string逆序_Java学习笔记(八)——异常
  6. android仿qq聊天项目点评,android 实现qq聊天对话界面效果
  7. python 调用 tensorflow.dll_解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题...
  8. 只用一张图+相机走位,AI就能脑补周围环境,来自华人团队 | CVPR2022
  9. 现在,用音频也能指挥GAN生成图像了
  10. 冲上热搜的这款国产“阿法狗”,究竟是什么来头?