Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios “进口”与“进口”有什么区别&引用;在.h和.m文件中?_Ios_Objective C - Fatal编程技术网

Ios “进口”与“进口”有什么区别&引用;在.h和.m文件中?

Ios “进口”与“进口”有什么区别&引用;在.h和.m文件中?,ios,objective-c,Ios,Objective C,我们可以并且如何询问这个问题以及明确的指导原则是什么?这个(可能是简化的)版本是这样的: 如果导入头文件/接口文件,就像在该位置包含整个其他文件一样。因此,通常您的所有接口代码都在该位置已知。当您使用某些类/对象时,编译器需要知道它们是什么以及如何准确地调用它们:方法需要什么参数/参数,方法返回什么?为了回答这些问题,头文件通常包含在实现(.m)文件中 当实现导入自己的头文件时,通常可以将其他导入放在那里。但是何时需要在头文件中导入?在声明接口时,您经常提到其他类型/类,即说@proerty(s

我们可以并且如何询问这个问题以及明确的指导原则是什么?

这个(可能是简化的)版本是这样的:

如果导入头文件/接口文件,就像在该位置包含整个其他文件一样。因此,通常您的所有接口代码都在该位置已知。当您使用某些类/对象时,编译器需要知道它们是什么以及如何准确地调用它们:方法需要什么参数/参数,方法返回什么?为了回答这些问题,头文件通常包含在实现(.m)文件中

当实现导入自己的头文件时,通常可以将其他导入放在那里。但是何时需要在头文件中导入?在声明接口时,您经常提到其他类型/类,即说
@proerty(strong)SomeClass*元素。现在,编译器需要了解一些类,但不是全部。如果编译器知道它是另一个类,那么此时就可以了。在头文件中,不需要更多信息,因此
@class SomeClass
的“转发声明”可能就足够了。为其他类导入完整的头文件也可以

那么进口的坏处在哪里呢?主要有两个参数:编译时和导入周期。考虑一下这个小例子,无论什么时候改变,包括它的所有东西也必须重新编译。这很容易通过完整的代码进行级联。此外,很明显,任何导入头文件的代码都将导入它们的所有导入内容,等等。cycles参数的工作方式如下。A.h导入B.h,B.h导入A.h。根据其中的内容,一个应该比另一个先知道

(我想说的是,使用最新的编译器,问题会稍微轻松一些,但基本的论证仍然成立)

更多注意事项:当您声明两个相互关联的类型时,可能需要@class forward声明,即使用您在下面声明的某个类的协议:

@class SomeClass;

@protocol SomeProtocol
-(void)doSomethingWith:(SomeClass *)object;
@end;

@interface SomeClass
@end

转发声明不适用于类实现的协议或父类。

问题不清楚。你是在问在头文件中使用
@class
#import
之间的区别吗?不仅如此,你能解释更多吗?你已经有了一个看起来相当完整的答案。非常感谢你的回答!在这个问题上,你能谈谈编译和运行的区别吗?这都是关于源代码和编译的。它对正在运行的程序没有任何影响。