【问题标题】:How to add -fobjc-arc-exceptions flag correctly into the XCode?如何将 -fobjc-arc-exceptions 标志正确添加到 XCode 中?
【发布时间】:2023-01-09 22:33:02
【问题描述】:

我正在使用 https://github.com/williamFalcon/SwiftTryCatch 作为罕见的 NSInternalInconsistencyException 事件的解决方法。

这是代码 sn-p。

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. 选择项目窗口左上角的项目。
  2. 选择目标。
  3. 打开构建阶段窗格。
  4. 选择“编译源”

    现在,大约有 500 多个源代码文件。我在想,我应该

    1. 仅向文件SwiftTryCatch.hSwiftTryCatch.m 添加-fobjc-arc-exceptions 标志?
    2. 仅将 -fobjc-arc-exceptions 标志添加到文件 SwiftTryCatch.hSwiftTryCatch.m 和任何使用 SwiftTryCatch 的 *.swift 文件?
    3. 向所有 500 多个文件添加 -fobjc-arc-exceptions 标志?

      谢谢你。

【问题讨论】:

    标签: ios swift objective-c xcode


    【解决方案1】:

    你需要编译文件加薪-fobjc-arc-exceptions 除外。所以你需要重新编译 UIKit(或者可能是 CoreData),这是你做不到的。

    另请注意,-fobjc-arc-exceptions 只是有助于防止某些类型的内存泄漏。它不会使调用异常安全。异常仍然可以使系统处于未定义状态,具体取决于代码的编写方式。有时这种未定义状态不会导致任何实际问题,但通常不可能从异常中恢复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多