常见的creah原因:
- 容器越界(数组,字典,字符串等)
- 使用未初始化的变量
- 用户授权问题
- 选择器方法未定义
- 线程死锁
- 数据类型不匹配(常见null)
- 野指针
- 死循环
runtime可以做什么?
- method_swizzle,hook方法
- 动态添加方法和属性
- 可以获取到类中的实例变量和属性
你知道哪些类簇?他们有什么优缺点?
类簇:一种设计模式。在公共抽象超类下对多个私有的具体子类进行分组。是基于抽象工厂设计模式的。
简化了面向对象框架的公共可见体系结构,而不会降低其功能丰富度。
常见的,NSString,NSArray,NSDictionary等。比如数组中:‘__NSPlaceholderArry,__NSArrayI,__NSArray0,__NSArray0
优点:
- 隐藏抽象基类中复杂的细节
- 不需要脊柱各种对象的具体实现,简化开发成本,提高开发效率
- 便于封装和组件化
- 减少if-else这样的缺乏扩展性的代码
- 增加新功能支持不影响原有代码
不使用三方SDK如何收集crash堆栈信息?
系统类NSSetUncaughtExceptionHandler,捕获系统崩溃,打印exception描述堆栈信息
有没有办法检测到异常后不让程序闪退?
- 使NSSetUncaughtExceptionHandler捕获到崩溃信息之后
- 获取当前runloop中的modes,重新创建while循环,模拟runloop执行,把modes加入runloop中,使runloop保活,继续正常运行app