iOS-反射机制和应用

反射机制

iOS反射机制:运行时选择创建哪个实例,并动态选择调用哪个方法。

 

获取Class的三种方法

// 通过字符串获取class  

Class class = NSClassFromString(@"NSString");  

NSLog(@"class type : %@", class);  

 

// 直接用class 来创建对象 ,通过对象来获取class 

id str = [[class alloc] init];   

NSLog(@"%@", [str class]);  

 

// 通过类来获取class  

NSLog(@"%d", class==NSString.class);   

 

常用判断方法

// 当前对象是否这个类或其子类的实例

- (BOOL)isKindOfClass:(Class)aClass;

// 当前对象是否是这个类的实例

- (BOOL)isMemberOfClass:(Class)aClass;

// 当前对象是否遵守这个协议

- (BOOL)conformsToProtocol:(Protocol *)aProtocol;

// 当前对象是否实现这个方法

- (BOOL)respondsToSelector:(SEL)aSelector;

 

  • OC中使用反射的优点

松耦合,类与类之间不需要太多依赖
构建灵活

  • OC中使用反射的缺点

不利于维护。使用反射模糊了程序内部实际发生的事情,隐藏了程序的逻辑。这种绕过源码的方式比直接代码更为复杂,增加了维护成本。

性能较差。使用反射匹配字符串间接命中内存比直接命中内存的方式要慢。当然,这个程度取决于使用场景,如果只是作为程序中很少涉及的部分,这个性能上的影响可以忽略不计。但是,如果在性能很关键的应用核心逻辑中使用反射,性能问题就尤其重要了

 

应用场景:

1、路由模式情况下的页面跳转。

2、FMDB二次数据库封装。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值