Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Objective c 在接口文件中导入类和转发声明(@class)之间有什么区别?_Objective C_Ios - Fatal编程技术网

Objective c 在接口文件中导入类和转发声明(@class)之间有什么区别?

Objective c 在接口文件中导入类和转发声明(@class)之间有什么区别?,objective-c,ios,Objective C,Ios,可能重复: 我只是想知道在接口文件中导入头文件和在接口文件中使用@class有什么区别?我注意到,如果我们在接口文件中导入头文件,我们可以直接创建该类的实例。与导入头文件相反,我们在接口文件中使用@class,在实现文件中导入头文件?有人能解释一下吗?@class只引用该类,而import对它所属的类具有强绑定 包括类的方法及其实现。@类还用于避免循环或闭环。@class指令只是向编译器保证类存在,但是,当导入引用类的每个成员时,不会告诉它更多关于该类的信息,这样编译器在运行时就可以知道。@

可能重复:


我只是想知道在接口文件中导入头文件和在接口文件中使用@class有什么区别?我注意到,如果我们在接口文件中导入头文件,我们可以直接创建该类的实例。与导入头文件相反,我们在接口文件中使用@class,在实现文件中导入头文件?有人能解释一下吗?

@class只引用该类,而import对它所属的类具有强绑定
包括类的方法及其实现。@类还用于避免循环或闭环。@class指令只是向编译器保证类存在,但是,当导入引用类的每个成员时,不会告诉它更多关于该类的信息,这样编译器在运行时就可以知道。

@class只引用该类,而导入对它所属的类具有强绑定
包括类的方法及其实现。@类还用于避免循环或闭环。@class指令只是向编译器保证类存在,但是,当导入引用了类的每个成员时,不会告诉它更多关于类的信息,这样在运行时编译器就可以知道了。

使用前向声明和导入仅在实现文件中依赖的头是最佳做法。如果在头文件中导入,则会为编译器建立依赖关系。假设您在b.h中导入a.h,然后在c.h中导入b.h。现在,当您在a.h中更改某些内容时,编译器还必须重新编译c.m,因为其依赖项已更改

例如,如果在预编译头文件(.pch)中添加#define或#import,则必须重新编译所有文件


Objective-C具有防止多个导入(比较#包含)的功能,因此您不必检查同一头文件的多个导入。

使用前向声明并仅在实现文件中导入依赖的头是最佳做法。如果在头文件中导入,则会为编译器建立依赖关系。假设您在b.h中导入a.h,然后在c.h中导入b.h。现在,当您在a.h中更改某些内容时,编译器还必须重新编译c.m,因为其依赖项已更改

例如,如果在预编译头文件(.pch)中添加#define或#import,则必须重新编译所有文件

Objective-C可以防止多次导入(compare#include),因此您不必检查同一头文件的多次导入