1. 導(dǎo)入objective c的頭文件時(shí)用#import娘侍,包含c/c++頭文件時(shí)用#include粮揉。
假如有兩個(gè)類 EOCPerson 和 EOCEmployer ,這兩個(gè)類各自的頭文件中都引入了對(duì)方的頭文件,則會(huì)導(dǎo)致"循環(huán)引用",當(dāng)解析其中一個(gè)頭文件時(shí),編譯器會(huì)發(fā)現(xiàn)它引入了另一個(gè)頭文件,而那個(gè)頭文件又回過(guò)頭來(lái)引用第一個(gè)頭文件,如果使用#improt而非#include指令則不會(huì)導(dǎo)致死循環(huán),也就是說(shuō)#import確保一個(gè)頭文件只能被導(dǎo)入一次屠缭,這使你在遞歸包含中不會(huì)出現(xiàn)問(wèn)題黄琼,所以 #import比起#include的好處是不會(huì)引起交叉編譯
2.雖然#improt不會(huì)導(dǎo)致死循環(huán),但是卻意味著這兩個(gè)類里面有一個(gè)是無(wú)法被正確編譯的,所以我們就要用到向前聲明@Class,如果你在編譯時(shí)只需要知道有EOCEmployer這個(gè)類,而不需要知道EOCEmployer類的全部細(xì)節(jié),這個(gè)時(shí)候,你就可以使用@Class,如果你需要使用EOCEmployer類,則必須知道該類的所有接口細(xì)節(jié),這個(gè)時(shí)候,就需要#improt
3.將引入頭文件的時(shí)機(jī)盡量延后,只有在確有需要的時(shí)候引用,這樣就可以減少類的使用者所需引入的頭文件的數(shù)量,因?yàn)橹灰?improt頭文件以后,就會(huì)知道該類的所有細(xì)節(jié),會(huì)引入許多根本就用不到的內(nèi)容,增加編譯時(shí)間
4.有些時(shí)候必須要在頭文件中引入其他頭文件,入股你寫的類繼承自某個(gè)超類,則必須引入定義那個(gè)超類的頭文件,同理,如果要聲明你寫的類遵從某個(gè)協(xié)議,那么該協(xié)議必須有完整定義,且不能使用向前聲明.向前聲明只能告訴編譯器有某個(gè)協(xié)議,而此時(shí)編譯器卻要知道該協(xié)議中定義的方法