2012-01-05 38 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

相關問題