我正在使用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中吗?
这些是我正在尝试的步骤
1.选择项目窗口左上角的项目。
1.选择目标。
1.打开生成阶段窗格。
1.选择“编译源”
现在,大约有500多个源代码文件。我想知道,我应该
1.是否仅将-fobjc-arc-exceptions
标志添加到文件SwiftTryCatch.h
和SwiftTryCatch.m
?
1.仅将-fobjc-arc-exceptions
标记添加到文件SwiftTryCatch.h
、SwiftTryCatch.m
和任何使用SwiftTryCatch
的 *.swift文件?
1.将-fobjc-arc-exceptions
标志添加到所有500多个文件?
谢谢你。
1条答案
按热度按时间rsl1atfo1#
您需要编译 * 引发 *
-fobjc-arc-exceptions
异常的文件,因此您需要重新编译UIKit(或者CoreData),但您不能这样做。还要注意
-fobjc-arc-exceptions
只是帮助防止某些类型的内存泄漏。它并没有使调用成为异常安全的。异常仍然可以使系统处于未定义的状态,这取决于代码是如何编写的。有时这种未定义的状态不会导致任何实际问题,但通常不可能从异常中恢复。