2019独角兽企业重金招聘Python工程师标准>>>

在C/S开发时,程序员经常会由于粗心,或者服务端不经客户端添加一些数据,如果代码写的不够严谨,经常会出现数组访问越界一类的崩溃,如何出现问题了,可以不崩溃,只是进行上报,后台收集到信息后利用JSPatch或者其他工具进行修复.

这里核心的就是一个方法

OBJC_EXPORT void method_exchangeImplementations(Method m1, Method m2) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);

这里有2个参数,2个要在运行时交换的方法.

Foundation框架里objectAtIndex是不带有越界检测功能的,so,我们可以自己重写objectAtIndex并实现越界检测的功能.

- (instancetype)safe_objectAtIndex:(NSUInteger)index {if (self.count - 1 < index) {@try {return [self safe_objectAtIndex:index];}@catch (NSException *exception) {NSLog(@"---------- %s Crash Because Method %s  ----------\n", class_getName(self.class), __func__);NSLog(@"%@", [exception callStackSymbols]);return nil;}@finally {}} else {return [self safe_objectAtIndex:index];}}

这里实现一个safe_objectAtIndex,并对越界进行判断.当catch到崩溃后,进行上报或者其它通知后台的操作,这样给用户的体验更好些,而且也可以收集到我们想要的崩溃信息了.

具体的实现见GitHub代码

转载于:https://my.oschina.net/u/2435827/blog/616053

Method Swizzling 处理一类简单的崩溃相关推荐

  1. Method Swizzling 为什么要先调用 class_addMethod?

    先上个 Swift 中的 demo:Method Swizzling Swift 中的实现 其实 Swift 中实现原理和 OC 基本一致,只是苹果爸爸不再允许在 Swift 中使用+load()和+ ...

  2. iOS 开发:『Runtime』详解(二)Method Swizzling

    本文用来介绍 iOS 开发中『Runtime』中的黑魔法Method Swizzling. 通过本文,您将了解到: Method Swizzling(动态方法交换)简介 Method Swizzlin ...

  3. runtime实践之Method Swizzling

    利用 Objective-C 的 Runtime 特性,我们可以给语言做扩展,帮助解决项目开发中的一些设计和技术问题.这一篇,我们来探索一些利用 Objective-C Runtime 的黑色技巧.这 ...

  4. Method Swizzling的各种姿势

    因为Objective-C的runtime机制, Method Swizzling这个黑魔法解决了我们实际开发中诸多常规手段所无法解决的问题, 比如代码的插桩,Hook,Patch等等. 我们首先看看 ...

  5. 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入

    概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为" ...

  6. Objective-C Runtime 运行时之四:Method Swizzling

    理解Method Swizzling是学习runtime机制的一个很好的机会.在此不多做整理,仅翻译由Mattt Thompson发表于nshipster的Method Swizzling一文. Me ...

  7. Objective-C Runtime (三):Method Swizzling(方法替换)

    Objective-C Runtime (三):Method Swizzling(方法替换) Method Swizzling是一种改变改变一个'selector'的实际实现的技术.通过这一技术,我们 ...

  8. Objective-C的hook方案(一): Method Swizzling

    在没有一个类的实现源码的情况下,想改变其中一个方法的实现,除了继承它重写.和借助类别重名方法暴力抢先之外,还有更加灵活的方法吗?在Objective-C编程中,如何实现hook呢?标题有点大,计划分几 ...

  9. runtime(四) method swizzling 与AOP编程

    什么是 AOP : (site: baike.baidu.com),引用百度百科中的解释就是: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过 ...

最新文章

  1. Windows 编程[9] - WM_CLOSE 消息
  2. 计算从A地出发到各个地方的路径及距离
  3. mybatis SqlMapConfig.xml
  4. 自学前端很难吗?只要你足够努力,高中学历也能获得offer
  5. 宣布下,一个小的里程碑!
  6. SQL之总结(四)---null问题的处理
  7. 仿今日头条项目——登录注册
  8. 你装陈桥(五笔)啦吗,这是什么...!(qcssb19.exe)
  9. C6能比C8快多少(Altera的FPGA速度等级)
  10. 蓝叠模拟器查看Android版本,BlueStacks蓝叠版本信息在哪看蓝叠模拟器版本信息查看方法...
  11. 烽火2640路由器命令行手册-07-安全配置命令
  12. 洞泾智能机器人产业基地_松江洞泾加快布局人工智能全产业链 腾讯优图创新基地揭牌...
  13. Day2--使用ESP32双核、U8G2 OLED任务、任务以绝对频率运行、任务内存优化
  14. 永信至诚科创板上市:市值28亿 ​奇安信曾是第三大股东
  15. 如何在Windows中修改您的名字和公司名?
  16. Java多线程上——基本概念及操作
  17. DDS协议与OPCUA对比
  18. 北上广测试工程师月薪20K往上,该如何做,需要会什么技能?
  19. dacp全称_2018年大数据平台基础软件维保服务 招标公告
  20. 在线免费角色动画网站:mixamo

热门文章

  1. 用vmware-converter4把linux 迁移到ESX4.1中
  2. 让IE的F1帮助变成自己的
  3. Java 集合框架 : Collection、Map
  4. requirejs、vue、vuex、vue-route的结合使用,您认为可行吗?
  5. 已知可生成0~4的rand5(),实现生成0~6的rand7()
  6. 1021. 个位数统计 (15)
  7. hdu 5621 KK's Point(数学,推理题)
  8. jQuery库中的变量$和其它类库的变量$冲突解决方案
  9. 转:Ubuntu下ibus-sunpinyin的安装及翻页快捷键设置!
  10. Kali获取不到IP解决方案