【问题标题】:Xcode behaves odd while showing "Block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior" warningsXcode 在显示“Block 隐式保留 'self';明确提及 'self' 以表明这是预期行为”警告时表现得很奇怪
【发布时间】:2018-04-06 08:11:14
【问题描述】:

我的客户有一个旧的基于 Obj-C 的 iOS 项目,希望我对其进行更新。

问题是,在我的计算机上,该项目没有警告。但在他的电脑上,Xcode 显示了 130+ 个Block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior 警告。

我想在没有警告的情况下推送项目,但在我的 Mac 上看不到/显示/重新创建它们。

有什么建议吗?谢谢。

注意事项:

  • 开发目标是 iOS 11.3。
  • 我们使用的是最新版本的 macOS 和 Xcode。
  • 我的客户使用的是 MacBook Pro,我认为它是 2013 或 2014 版本。
  • 我使用的是 2013 年末的 MacPro。
  • 该项目将 CocoaPods 与这些 Pod 一起使用:
    • pod 'Firebase/Core'
    • pod 'Firebase/AdMob'
    • pod 'JGProgressHUD'

【问题讨论】:

  • 不是重复的。我已经看过那个问题了。我知道如何解决它们,这不是我的问题。我的问题是我在我的机器上看不到这些警告,如果我看不到,我无法修复。 + 我不会将 CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF 设置为 NO。
  • 反其道而行之。浏览项目和目标并检查 CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF 是否为 YES
  • 天哪。是的,它被设置为否。但那是谁干的!?为什么在客户的代码上是 YES?他叉了我的。无论如何...非常感谢。
  • Wat da fork! :D 好吧.. 这很奇怪 :D。顺便说一句,现在接受你自己的答案是有意义的:)

标签: ios objective-c xcode


【解决方案1】:

Xcode 9.3 (9E145) 会将 CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF 设置为 YES,作为其“更新项目设置”步骤的一部分。

此外,Cocoapod 依赖于一个名为 Xcodeproj 的 gem,从 1.5.5 版本开始(我认为)Xcodeproj 也会默认为每个 pod 目标设置这个标志为 YES。 (请注意,您可以将相同版本的 Cocoapods 与不同版本的 Xcodeproj 一起使用,并在运行 pod install/update 时得到不同的结果。

您可以通过为每个构建目标手动将此标志设置为 YES 来强制显示这些错误(在构建设置中执行此操作,搜索“隐式保留” - 条目标记为“在块内隐式保留'self'”它映射到 Clang 标志 CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF)。

如果您使用相同版本的 Xcode,我怀疑您使用不同版本的 Cocoapods(或 Xcodeproj)。请注意,这些警告可能来自 pod 而不是您的代码。

【讨论】:

    【解决方案2】:

    非常感谢@staticVoidMan,-我不知道为什么以及是谁做的。我是项目的第三个开发者——CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF 被设置为 NO。将其设置为 YES 会显示警告。

    有趣的部分是我的客户克隆了我的项目,在他的项目中,它设置为 YES。奇怪的。任何。解决了。​​

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 1970-01-01
      • 2016-06-01
      • 2015-04-08
      • 2016-05-03
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多