iOS开发你需要知道的

iOS开发 Crash防卫

2020-12-22  本文已影响0人  喜剧收尾_XWX

1.在iOS中可能出现Crash的情况

2.常见Crash

Objective-C 语言是一门动态语言,我们可以利用 Objective-C 语言的 Runtime 运行时机制,对需要Hook的类添加 Category(分类),在各个分类的 +(void)load; 中通过 Method Swizzling拦截容易造成崩溃的系统方法,将系统原有方法与添加的防护方法的 selector(方法选择器)IMP(函数实现指针)进行对调。然后在替换方法中添加防护操作,从而达到避免以及修复崩溃的目的。

3.KVO Crash

KVO 添加次数和移除次数不匹配:
移除了未注册的观察者,导致崩溃。
重复移除多次,移除次数多于添加次数,导致崩溃。
重复添加多次,虽然不会崩溃,但是发生改变时,也同时会被观察多次。
被观察者提前被释放,被观察者在 dealloc 时仍然注册着 KVO,导致崩溃。
例如:被观察者是局部变量的情况(iOS 10 及之前会崩溃)。
添加了观察者,但未实现 observeValueForKeyPath:ofObject:change:context: 方法,导致崩溃。
添加或者移除时 keypath == nil,导致崩溃。

文章参考:https://www.jianshu.com/p/e3713d309283

4.KVC Crash

KVC 日常使用造成崩溃的原因通常有以下几个:

key 不是对象的属性,造成崩溃。
keyPath 不正确,造成崩溃。
key 为 nil,造成崩溃。
value 为 nil,为非对象设值,造成崩溃。

上一篇 下一篇

猜你喜欢

热点阅读