You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:06:05