#import的Obj-C规则?

时间:2012-01-05 11:39:45

标签: iphone objective-c

有点n00b质疑这个,但我还没有能够在网上找到答案,只是想知道关于是否在接口中执行#import或实现的规则是什么? / p>

我刚刚意识到我的(一个)项目正在整个地方进口,我想整理一下。仅仅在界面中导入就足够了,然后实现会选择它吗?

另外,我确实通过谷歌阅读了它只推荐给位于不同框架的#import类,否则使用@class。任何人都可以验证这是最佳做法吗?

提前感谢。

4 个答案:

答案 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文件中。