在Objective-C中,是否需要导入每个h文件才能查看对象层次结构?

在Objective-C中,是否需要导入每个h文件才能查看对象层次结构?,objective-c,ios,import,Objective C,Ios,Import,我创建了3个对象,并将它们链接在一起: 调查问卷对象-其中包含 NextQuestion对象-包含 Answer对象-具有文本属性 在ViewController中,我希望能够调用: NSString *thisAnswerText = Questionnaire.nextQuestion.answer.text; 但是,要做到这一点,我必须将所有三个文件导入到我的.m文件中 #import "Questionnaire.h" #import "Question.h" #import "A

我创建了3个对象,并将它们链接在一起:

  • 调查问卷对象-其中包含
  • NextQuestion对象-包含
  • Answer对象-具有文本属性
在ViewController中,我希望能够调用:

NSString *thisAnswerText = Questionnaire.nextQuestion.answer.text;
但是,要做到这一点,我必须将所有三个文件导入到我的.m文件中

#import "Questionnaire.h"
#import "Question.h"
#import "Answer.h"
是否需要导入每个.m文件中使用的每个对象?或者我可以做些什么,这意味着我只需要导入顶级项目,它的所有子项都会被自动引用

注意。我知道我可以将所有三个都添加到Prefix.pch文件中,但我想知道我是否缺少Objective-C的一些技巧,Objective-C允许我声明一个项,它的子对象将自动导入


谢谢大家!

导入.h文件时,.h文件中的任何导入也可用。您可能需要清理和重建,但它们应该可用。因此,在您的情况下,不,您应该能够仅导入
Questionaire.h

此外,如果您的应用程序依赖于这些自定义类,并且它们将被到处使用,那么最好将它们导入到您的.pch文件中,并为您的所有类预编译它们

是否需要导入每个.m文件中使用的每个对象

并非在所有情况下都是这样,但是如果给对象发送消息,应该确保编译器看到它的声明——因为ObjC是一种非常动态的语言

或者我可以做些什么,这意味着我只需要导入顶级项目,它的所有子项都会被自动引用


是的,您可以在任何标题中添加
#import
(当然,必须与翻译兼容)。但是,应尽量减少添加
#import
s,因为
#import
s会增加构建时间并引入大量依赖项。

在接口的公共头文件中,应尽可能多地转发声明,并且只转发真正需要的
#import
。这将有助于缩短构建时间。在实现文件中,您可以导入所需的任何内容

有时出于可用性考虑,您可能需要将多个头收集到一个“MyFramework.h”文件中,这样就不必每次使用一个类时都添加5个导入。但是,您应该注意这一点,因为如果在许多地方导入标头,则会增加生成时间


您可能还想考虑将通用导入添加到前缀头(.pch)中,该前缀头可以由Xcode预编译以稍微缩短构建时间。

只导入需要资源的头。虽然这并不像使用
#include
那样低效,但我仍然建议您只导入您计划使用的内容。谢谢Ryan!你搞定了。如果我在链中的每个.h文件中添加一个导入,我只需要添加第一个Questionaire.h就可以看到很多。你这个男人Ryan!谢谢