我使用https://github.com/williamFalcon/SwiftTryCatch作为罕见的NSInternalInconsistencyException
事件的解决方案。
下面是代码片段
private func safePerformBatchUpdates(_ updates: (() -> Void)?, completion: ((Bool) -> Void)? = nil) {
SwiftTryCatch.try({
collectionView.performBatchUpdates(updates, completion: completion)
}, catch: { (error) in
print("(error)")
Crashlytics.crashlytics().record(error: error)
recoverFromPerformBatchUpdatesError()
}, finally: nil)
}
在https://github.com/williamFalcon/SwiftTryCatch中提到
有人指出,如果没有-fobjc-arc-exceptions标志,这将导致内存泄漏http://clang.llvm.org/docs/AutomaticReferenceCounting.html#exceptions因此,arc生成的代码在默认情况下会泄露异常如果这个过程要立即终止就可以了吗无论如何。那些关心从异常中恢复的程序应该启用该选项。
我怎样才能正确地添加-fobjc-arc-exceptions
标志,进入我的Xcode?
这些是我要做的步骤
- 选择项目窗口左上角的项目。
- 选择目标。
- 打开构建阶段窗格。
- 选择"编译源">
现在,大约有500多个源代码文件。我在想,我是否应该
- 只添加
-fobjc-arc-exceptions
标志,SwiftTryCatch.h
和SwiftTryCatch.m
文件? - 只添加
-fobjc-arc-exceptions
标志,文件SwiftTryCatch.h
,SwiftTryCatch.m
和任何*.swift文件使用SwiftTryCatch
? - 添加
-fobjc-arc-exceptions
标志到所有500+文件?
需要编译在-fobjc-arc-exceptions
中引发异常的文件。所以你需要重新编译UIKit(或者可能是CoreData),这是你不能做的。
还要注意-fobjc-arc-exceptions
只是帮助防止某些类型的内存泄漏。它不会使调用成为异常安全的。异常仍然可以使系统处于未定义状态,这取决于代码的编写方式。有时这种未定义状态不会引起任何实际问题,但通常不可能从异常中恢复。