如何在Xcode中正确添加-fobjc-arc-exceptions编译标记?
关于SwiftTryCatch库添加
-fobjc-arc-exceptions标记的正确方式 我用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) }
库文档提到,不添加-fobjc-arc-exceptions标记会导致内存泄漏,现在我在Compile Sources面板下有500+源码文件,纠结该给哪些文件加标记,正确的选择是:
结论:仅为SwiftTryCatch.h和SwiftTryCatch.m添加-fobjc-arc-exceptions标记
原因解释:
- 标记作用范围:
-fobjc-arc-exceptions是Objective-C专属编译标记,用于让ARC在异常抛出时自动清理对象,避免内存泄漏。SwiftTryCatch本身是用Objective-C实现的异常捕获逻辑,只有它的代码需要这个标记来保证异常场景下的内存安全。 - Swift文件无需添加:Swift语言的异常处理机制自带内存安全保障,编译时默认会处理异常场景下的对象生命周期,不需要这个Objective-C专属标记。
- 全量添加无意义且有开销:给所有500+文件添加标记会让ARC在所有OC代码中生成额外的异常清理逻辑,不仅没必要,还会增加编译时间和运行时性能开销。
内容的提问来源于stack exchange,提问作者Cheok Yan Cheng
相关产品推荐
相关产品推荐

