Xcode表现出奇怪的同时显示" Block隐含地保留' self&#39 ;;明确提及' self'表明这是预期的行为"警告

时间:2018-04-06 08:11:14

标签: ios objective-c xcode

我的客户端有一个旧的基于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'

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

非常感谢@staticVoidMan,我不知道为什么以及是谁做到了这一点。我是该项目的第3位开发人员 - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF设置为NO。将其设置为YES会显示警告。

有趣的是我的客户克隆了我的项目,在他的项目中,它被设置为YES。奇。随你。它解决了。