iOS笔记-Crash

常见的creah原因:
  • 容器越界(数组,字典,字符串等)
  • 使用未初始化的变量
  • 用户授权问题
  • 选择器方法未定义
  • 线程死锁
  • 数据类型不匹配(常见null)
  • 野指针
  • 死循环
runtime可以做什么?
  • method_swizzle,hook方法
  • 动态添加方法和属性
  • 可以获取到类中的实例变量和属性
你知道哪些类簇?他们有什么优缺点?
类簇:一种设计模式。在公共抽象超类下对多个私有的具体子类进行分组。是基于抽象工厂设计模式的。

简化了面向对象框架的公共可见体系结构,而不会降低其功能丰富度。

常见的,NSString,NSArray,NSDictionary等。比如数组中:‘__NSPlaceholderArry,__NSArrayI,__NSArray0,__NSArray0

优点:
  • 隐藏抽象基类中复杂的细节
  • 不需要脊柱各种对象的具体实现,简化开发成本,提高开发效率
  • 便于封装和组件化
  • 减少if-else这样的缺乏扩展性的代码
  • 增加新功能支持不影响原有代码
不使用三方SDK如何收集crash堆栈信息?

系统类NSSetUncaughtExceptionHandler,捕获系统崩溃,打印exception描述堆栈信息

有没有办法检测到异常后不让程序闪退?
  1. 使NSSetUncaughtExceptionHandler捕获到崩溃信息之后
  2. 获取当前runloop中的modes,重新创建while循环,模拟runloop执行,把modes加入runloop中,使runloop保活,继续正常运行app
NSSetUncaughtExceptionHandler底层原理

你可能感兴趣的:(iOS笔记-Crash)