我刚刚意识到我的(一个)项目正在整个地方进口,我想整理一下。仅仅在界面中导入就足够了,然后实现会选择它吗?
另外,我确实通过谷歌阅读了它只推荐给位于不同框架的#import类,否则使用@class。任何人都可以验证这是最佳做法吗?
提前感谢。
答案 0 :(得分:2)
是的,仅在实施文件中导入就足够了。如果您已在.h文件中声明该类,则在.h文件中使用前向声明即。@class ClassName;
。
答案 1 :(得分:0)
好吧,绝对不要导入.m
个文件。
还要注意双向导入:不要让header1导入header2,而header2导入header1。那只会出错。
最好的方法是制作一个类图(UML或其他东西),以显示哪些类需要哪些类。然后你知道你只需要那些进口。
尽量避免从标头导入文件 - 实现文件中的导入是可以的。
答案 2 :(得分:0)
最佳做法是最小化导入的文件数,以便部分重新编译不必导入文件。
要做到这一点,请注意,只要您不访问X的实例或类变量或调用X的方法,就可以使用@class X.如果您需要方法或变量,那么您应该#import。 (实际上,这种区别只适用于程序将编译和运行的变量,如果你在使用@class声明的类上调用方法但是你会得到未知n选择器的警告,这不是一个好习惯)
使用@class X
声明,您只能引用指向该类的指针,即X *
除非你从类继承,否则归结为在头文件中使用@class。 在实现文件中使用#import,除非您只是传递指针而不是向该类的任何内容发送消息。
这不是100%,因为有预编译头文件,因此大多数项目中使用的类都可以#imported,因为它将在预编译头文件中,因此只读取一次。
答案 3 :(得分:0)
请注意所有这些规则,如果要导入声明协议的标头,请务必将导入放在.h文件中。