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);} @end int main(int argc, const char * argv[]) {
@autoreleasepool { Class class = NSClassFromString(@"ClassA"); //通过字符串获取CLASS
NSLog(@"%@", [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 NSInvocation
int input1 = ;
int input2 = ;
int input3 = ; [inv setArgument:&(input1) atIndex:]; //第一个参数传入
[inv setArgument:&(input2) atIndex:]; //第二个参数传入
[inv setArgument:&(input3) atIndex:]; //第三个参数传入
[inv invoke];
} [tmp performSelector:sel1 withObject:nil]; //执行该方法 if([tmp respondsToSelector:sel2] == YES) {
[tmp performSelector:sel2 withObject:nil];
} }
return ;
}

最新文章

  1. CMD的几个常用API
  2. [python](爬虫)如何使用正确的姿势欣赏知乎的“长得好看是怎样一种体验呢?”问答中的相片
  3. Jmeter 中通过(_time函数)获取10位时间戳的方法
  4. LeetCode Meeting Rooms
  5. HDU 1166 单点更新,区间求和
  6. Android IOS WebRTC 音视频开发总结(十九)-- kurento
  7. 浅析python的string.Template
  8. js截取指定字节长度的字符串
  9. IBM MQ Reason 2538(MQRC_HOST_NOT_AVAILABLE) 错误原因一例
  10. swift swizzle
  11. java.lang.UnsupportedClassVersionError: Bad version number in .class file
  12. jQuery1.9(辅助函数)学习之——.serializeArray();
  13. 安装python3.4
  14. Delphi中复制带有String的记录结构时不能使用Move之类的内存操作函数
  15. Uva 409-Excuses, Excuses!(串)
  16. spring boot / cloud (七) 使用@Retryable来进行重处理
  17. Archlinux/Manjaro使用笔记-安装配置搜狗输入法步骤
  18. JVM的内存区域划分(转)
  19. spark shuffle原理
  20. JVM监控

热门文章

  1. Excel2016右键新建工作表,打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”的解决办法
  2. DataSet用法详细 转
  3. bash fifo管道使用测试例子
  4. 基于AWS的云服务架构最佳实践
  5. 基于Socket客户端局域网或广域网内共享同一短信猫收发短信的开发解决方案
  6. sublime配置react
  7. codingNet项目的创建
  8. Quartz.Net与MVC结合定时任务
  9. python第一天基础1-1
  10. js判断手机浏览器是横屏or竖屏