RunTime简称运行时。OC就是运行时机制,其中最主要的是消息机制。
1、runtime,AOP应该也是runtime的主要用途,AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。服务端我们的AOP经常使用的场景有:登录验证(单点登录),日志记录,权限限制等等,这样在整个func的业务逻辑上就可以以非入侵的方式控制了,同样的功能引入客户端也很有必要。
a通俗来讲:切面业务的代码可以独立出来,方便其他应用使用。
b提高代码review的质量,比如可以规定某些类的某些方法才用特定的命名规范,这样review的时候就可以发现一些问题
1、拦截系统自带的方法调用(Swizzle 黑魔法),也可以说成对系统的方法进行替换,比如拦截imageNamed:、viewDidLoad、alloc
a为UIImage建一个分类(UIImage+Category)
+ (UIImage*)change_imageNamed:(NSString*)name {
double version = [[UIDevicecurrentDevice].systemVersiondoubleValue];
if(version >=7.0) {
// 如果系统版本是7.0以上,使用另外一套文件名结尾是‘_os7’的扁平化图片
name = [name stringByAppendingString:@"_os7"]; }
return[UIImagexh_imageNamed:name];
}
2、实现万能控制器跳转
产品来一变态需求,推送过来的消息,要跳转到任意控制器.利用runtime动态生成对象、属性、方法这特性,我们可以先跟服务端商量好,定义跳转规则,比如要跳转到A控制器,需要传属性id、type,那么服务端返回字典给我,里面有控制器名,两个属性名跟属性值,客户端就可以根据控制器名生成对象,再用kvc给对象赋值,这样就搞定了,demo:http://www.jianshu.com/p/8b3a9155468d
3、实现字典和模型的自动转换(核心就是可以遍历出字典中的每个属性,json解析中大牛框架都用了这个特性,包括MJEXtension,YYModel,jsonModel都是将json转换为字典,再遍历字典中的每个属性来进行modle的转换)。
class_copyIvarList成员变量、class_copyPropertyList属性、class_copyMethodList方法、class_copyProtocolList协议。
基本上主流的json 转model 都少不了,使用运行时动态获取属性的属性名的方法,来进行字典转模型替换,字典转模型效率最高的(耗时最短的)的是KVC,其他的字典转模型是在KVC 的key 和Value 做处理,动态的获取json 中的key 和value ,当然转换的过程中,第三方框架需要做一些判空啊,镶嵌的逻辑处理, 再进行KVC 转模型.这句代码 [xx setValue:value forKey:key];无论JsonModle,YYKIt,MJextension 都少不了[xx setValue:value forKey:key];这句代码的,不信可以去搜,这是字典转模型的核心方法
参考:runtime10种用法,http://www.cnblogs.com/jys509/p/5207159.html