我有一个有关 Objective C 的基本最佳实践问题。我了解以下之间的区别@class
and #import
但我不明白为什么默认的 Apple Xcode 模板会这样做:
AppDelegate.h:
@class ViewController;
.m:
#import "ViewController.h
当你可以只把后者#import
in the .h
并留下提及ViewController
出于.m
总共,从而简化了 1 行代码。
当然,节省 1 行代码不是问题,我只是好奇为什么要这样做?
线路@class ViewController;
是一个前向声明,因此编译器知道名称是什么ViewController
应该是的意思。重点是尽量少做#import
尽可能放在头文件中以加快编译速度。
想象一个文件a.h
这确实#import "b.h"
。现在每个导入的文件a.h
也自动导入b.h
这增加了编译器必须完成的工作量。通过使用前向声明,通常可以避免这种额外的导入,从而避免编译器的额外工作。
项目越大,类层次结构和依赖关系越复杂,这些就越多#import
这可能会成为一个问题。因此,养成尽可能使用前向声明的习惯是个好主意。
Edit:在评论之后,另一个重要的用例浮出水面:解决循环依赖。例如,如果类A想要参考类B反之亦然,一个必须先于另一个定义。但因为他们需要了解对方,所以我们遇到了一个悖论。是这样解决的:
// Tell the compiler: B will be a class type.
@class B;
// Now we can define A, the compiler has enough
// information to know what B means.
@interface A : NSObject {
B *b;
}
@end
// Since A is now defined, we can define B.
// Cycle is resolved.
@interface B : NSObject {
A *a;
}
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)