iOS RunTime之四:实例及实现分析

看看别人都在用runtime做什么?

实例001:iOS中利用 runtime 一键改变字体

知识点:

  • 利用Method Swizzling技术修改willMoveToSuperview:的实现,利用tag属性和isKindOfClass:之类的探测方法可以做一些精细的控制。
  • 在一个程序(main函数)运行之前,所用到的库被加载到runtime之后,系统自动完成所有注册到运行时系统的类的+load方法调用,而且确保父类的调用一定在子类之前,所以子类+load中没必要显式调用[super load];

实例002:Objective-C Runtime之着魔的UIAlertView

知识点:

  • 使用Category和Associated Objects为UIAlertView关联一个void (^)(UIAlertView *, NSUInteger)类型的block,并在设置block的同时将delegate设置为self。
  • 如果是开发iOS8+的应用,推荐使用UIAlertAction+UIAlertController
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"title" message:@"message" preferredStyle:UIAlertControllerStyleAlert]; 
 
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"cancel" style:UIAlertActionStyleCancel handler:nil]; 
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"ok" style:UIAlertActionStyleDefault 
handler:^(UIAlertAction *alertAction){ 
  NSLog(@"如果你是iOS8以上的应用,这个适合你,简单明了"); 
}]; 
[alertController addAction:cancelAction]; 
[alertController addAction:okAction]; 
 
[self presentViewController:alertController animated:YES completion:nil];

实例003:为iPad设备加载正确的nib文件

知识点:

  • 利用Method Swizzling技术修改loadNibNamed:owner:options:的实现,通过检查"@pad"后缀的文件是否存在决定加载哪个nib文件

实例004:自动实现NSCoding、NSCopying协议的对象

实例005:Json字典和Model对象的相互转换

参考:源码篇:Mantle
知识点:

  • KVC
  • NSValueTransform
  • NSInvocation
  • runtime中操作对象和类的属性的函数

实例006:iOS 万能跳转界面方法 (runtime实用篇一)

思路:将需要跳转的ViewController的类名、以及需要传递的参数封装起来,剩下的就是根据类名动态创建对象,然后根据参数字典给属性/成员变量赋值;OK,VC实例组装完了是push还是present好好考虑把。


实例007:JSPatch – 动态更新iOS APP,实时修复线上版本的bug

知识点:

  • 持续关注作者bang的博客
  • 基本原理:JS 传递字符串给 OC,OC 通过 Runtime 接口调用和替换 OC 方法。详细参考:JSPatch 实现原理详解
  • 使用 JSPatch的代码补全插件,并了解其实现原理
  • 使用 JSPatchConvertor 工具将OC源码自动转换成JS代码

扩展:
OC最实用的runtime总结,面试、工作你看我就足够了!

你可能感兴趣的:(iOS RunTime之四:实例及实现分析)