昨天在和基友討論.h要用什么方式引用比較好,特意去查了一下這方面的資揉忘。學(xué)無止境學(xué)無止境最疆。
1. import會(huì)包含這個(gè)類的所有信息,包括實(shí)體變量和方法珍德,而@class只是告訴編譯器练般,其后面聲明的名稱是類的名稱,至于這些類是如何定義的菱阵,暫時(shí)不用考慮踢俄,后面會(huì)再告訴你;
2. 在頭文件中晴及,一般只需要知道被引用的類的名稱就可以了都办,不需要知道其內(nèi)部的實(shí)體變量和方法,所以在頭文件中一般使用@class來聲明這個(gè)名稱是類的名稱虑稼,而在類的實(shí)現(xiàn)部分琳钉,因?yàn)闀?huì)用到這個(gè)引用類的內(nèi)部的實(shí)體變量和方法,所以需要使用#import來包含這個(gè)被引用類的頭文件蛛倦。
3. 在編譯效率方面考慮歌懒,如果你有100個(gè)頭文件都#import了同一個(gè)頭文件,或者這些文件是依次被引用的溯壶,如A–>B, B–>C, C–>D這樣的引用關(guān)系及皂。當(dāng)最開始的那個(gè)頭文件有變化的話,后面所有引用它的類都需要重新編譯且改,如果你的類有很多的話验烧,這將耗費(fèi)大量的時(shí)間。而是用@class則不會(huì)又跛。
4. 如果有循環(huán)依賴關(guān)系碍拆,如:A–>B, B–>A這樣的相互依賴關(guān)系,如果使用#import來相互包含慨蓝,那么就會(huì)出現(xiàn)編譯錯(cuò)誤感混,如果使用@class在兩個(gè)類的頭文件中相互聲明,則不會(huì)有編譯錯(cuò)誤出現(xiàn)礼烈。
所以弧满,一般來說,@class是放在interface中的此熬,只是為了在interface中引用這個(gè)類谱秽,把這個(gè)類作為一個(gè)類型來用的洽蛀。 在實(shí)現(xiàn)這個(gè)接口的實(shí)現(xiàn)類中,如果需要引用這個(gè)類的實(shí)體變量或者方法之類的疟赊,還是需要import在@class中聲明的類進(jìn)來.