n00b這個問題的一點,但我一直沒有找到答案在t'web,只是想知道什麼規則是圍繞是否#import在接口或實施?針對#import的Obj-C規則?
我才意識到我的(一個)項目進口所有的地方,我想整理一下。只需在界面中導入就足夠了,那麼實現是否會提取?
而且,我也通過谷歌閱讀,它的建議是駐留在不同的框架僅#進口類,否則使用@class。任何人都可以驗證,這是最佳做法嗎?
在此先感謝。
n00b這個問題的一點,但我一直沒有找到答案在t'web,只是想知道什麼規則是圍繞是否#import在接口或實施?針對#import的Obj-C規則?
我才意識到我的(一個)項目進口所有的地方,我想整理一下。只需在界面中導入就足夠了,那麼實現是否會提取?
而且,我也通過谷歌閱讀,它的建議是駐留在不同的框架僅#進口類,否則使用@class。任何人都可以驗證,這是最佳做法嗎?
在此先感謝。
最佳做法是最大限度地減少導入的文件數量,以便部分重新編譯不必導入文件。
要做到這一點需要注意的是,每當@class你不訪問X的實例或類變量,或致電X的方法,如果你需要的方法或變量,那麼你應該#IMPORT X可以被使用。 (實際上,這種區別只適用於程序將編譯和運行的變量,如果您調用使用@class聲明的類的方法,但會收到未知n選擇器的警告,這不是很好的做法)
使用@class X
聲明可以只引用指向類的指針即X *
這可以歸結爲在頭中使用@class,除非您從類繼承。 在實現文件中使用#import,除非您只是傳遞一個指針而不發送消息給該類的任何東西。
這不是100%,因爲有預編譯頭文件,因此大多數項目中使用的類可以#imported,因爲它將在預編譯頭文件中,因此只能讀取一次。
優秀 - 謝謝。 – SM2011 2012-01-05 12:06:50
那麼,絕對不要導入.m
文件。
同時還要注意與2路的進口:不要讓頭1 HEADER2進口,而進口HEADER2頭1。這隻會出錯。
最好的方法是製作一個類圖(UML或其他)來顯示哪些類需要哪些類。然後你知道你只需要這些進口。
儘量避免從頭文件導入文件 - 實現文件中的導入沒問題。
是的,僅在實現文件中導入就足夠了。如果您已經在.h文件中聲明該類,則在.h文件中使用前向聲明,即@class ClassName;
。
[@class與#進口(http://stackoverflow.com/questions/322597/class-vs-import) – beryllium 2012-01-05 11:45:58