Ios “进口”与“进口”有什么区别&引用;在.h和.m文件中?
我们可以并且如何询问这个问题以及明确的指导原则是什么?这个(可能是简化的)版本是这样的: 如果导入头文件/接口文件,就像在该位置包含整个其他文件一样。因此,通常您的所有接口代码都在该位置已知。当您使用某些类/对象时,编译器需要知道它们是什么以及如何准确地调用它们:方法需要什么参数/参数,方法返回什么?为了回答这些问题,头文件通常包含在实现(.m)文件中 当实现导入自己的头文件时,通常可以将其他导入放在那里。但是何时需要在头文件中导入?在声明接口时,您经常提到其他类型/类,即说Ios “进口”与“进口”有什么区别&引用;在.h和.m文件中?,ios,objective-c,Ios,Objective C,我们可以并且如何询问这个问题以及明确的指导原则是什么?这个(可能是简化的)版本是这样的: 如果导入头文件/接口文件,就像在该位置包含整个其他文件一样。因此,通常您的所有接口代码都在该位置已知。当您使用某些类/对象时,编译器需要知道它们是什么以及如何准确地调用它们:方法需要什么参数/参数,方法返回什么?为了回答这些问题,头文件通常包含在实现(.m)文件中 当实现导入自己的头文件时,通常可以将其他导入放在那里。但是何时需要在头文件中导入?在声明接口时,您经常提到其他类型/类,即说@proerty(s
@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
之间的区别吗?不仅如此,你能解释更多吗?你已经有了一个看起来相当完整的答案。非常感谢你的回答!在这个问题上,你能谈谈编译和运行的区别吗?这都是关于源代码和编译的。它对正在运行的程序没有任何影响。