2012-01-05 46 views
-1

n00b这个问题的一点,但我一直没有找到答案在t'web,只是想知道什么规则是围绕是否#import在接口或实施?针对#import的Obj-C规则?

我才意识到我的(一个)项目进口所有的地方,我想整理一下。只需在界面中导入就足够了,那么实现是否会提取?

而且,我也通过谷歌阅读,它的建议是驻留在不同的框架仅#进口类,否则使用@class。任何人都可以验证,这是最佳做法吗?

在此先感谢。

+0

[@class与#进口(http://stackoverflow.com/questions/322597/class-vs-import) – beryllium 2012-01-05 11:45:58

回答

0

最佳做法是最大限度地减少导入的文件数量,以便部分重新编译不必导入文件。

要做到这一点需要注意的是,每当@class你不访问X的实例或类变量,或致电X的方法,如果你需要的方法或变量,那么你应该#IMPORT X可以被使用。 (实际上,这种区别只适用于程序将编译和运行的变量,如果您调用使用@class声明的类的方法,但会收到未知n选择器的警告,这不是很好的做法)

使用@class X声明可以只引用指向类的指针即X *

这可以归结为在头中使用@class,除非您从类继承。 在实现文件中使用#import,除非您只是传递一个指针而不发送消息给该类的任何东西。

这不是100%,因为有预编译头文件,因此大多数项目中使用的类可以#imported,因为它将在预编译头文件中,因此只能读取一次。

+0

优秀 - 谢谢。 – SM2011 2012-01-05 12:06:50

0

那么,绝对不要导入.m文件。

同时还要注意与2路的进口:不要让头1 HEADER2进口,而进口HEADER2头1。这只会出错。

最好的方法是制作一个类图(UML或其他)来显示哪些类需要哪些类。然后你知道你只需要这些进口。

尽量避免从头文件导入文件 - 实现文件中的导入没问题。

2

是的,仅在实现文件中导入就足够了。如果您已经在.h文件中声明该类,则在.h文件中使用前向声明,即@class ClassName;

0

告诫所有这些规则,如果要导入声明一个协议的头部,务必把进口的.h文件。

+0

好的 - 谢谢你的回复。 – SM2011 2012-01-05 12:07:44