【问题标题】:How does XCode find classes without headers?XCode 如何找到没有标题的类?
【发布时间】:2013-01-31 20:44:46
【问题描述】:

我正在尝试删除我的 XCode 项目中不需要的标头,方法是一次取出一个并查看它们是否会导致编译器错误。

有时,我可以取出一个声明类的标头,Xcode 仍然允许我使用它。

比如我取出了#import "Chartboost.h",但是Chartboost *cb = [Chartboost sharedChartboost];这行没有错误

Chartboost 上单击选项表示它在NSObject.h 中声明

当我不导入头文件时,我的代码怎么还能compile!?

【问题讨论】:

  • 好吧,objective-c 依赖于消息传递,你可以向任何对象发送任何消息,无论它是否实现它。至少AFAIK
  • @StefanH 是的,但这与编译器错误无关。
  • 确保不要忽略警告。

标签: objective-c header-files declaration


【解决方案1】:

您正在导入 Chartboost.h,但通过其他导入的标题之一。这样你就不需要用无数的头文件来混淆每个类头。太糟糕了,XCode 并不能更好地告诉我们哪些标头已经可用...

【讨论】:

  • 嗯,你的答案的第一部分是正确的,但我完全反对在其他标题中导入标题的想法。是的,有时这是需要的(例如协议定义),但大多数时候正确使用前向声明可以防止我们不得不创建循环头导入。作为 OP 的另一个提示,请检查您项目的 pch 文件,该文件可能还会导入您想要摆脱的东西。
  • 是否有任何工具可用于查找不需要的导入?
  • 我明白你的意思,当然,如果你重构并删除标题,你可能很容易破坏一切。尽管如此,关于头文件中的大量导入语句实际上使得跟踪依赖关系变得更加困难。可以这么说,“只见树木不见森林”可能很容易......
  • 我遵循的一般规则:如果一个类/控制器直接依赖于另一个类(例如创建它的实例),则导入它,即使另一个类可能已经导入它。它不需要任何额外费用——#import 确保它只会被包含一次,并且如果另一个导入的类不再需要它并删除它自己的类。
【解决方案2】:

如果您没有导入 Chartboost.h,那么 Chartboost *cb = [Chartboost sharedChartboost]; 肯定会报错。唯一可能的解释是您可能正在导入其他文件反过来可能会导入 Chartboost。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2021-06-28
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多