在類的頭文件中盡量 少 的引用其他頭文件,盡量用 @class xxxxxx;
理解: 當(dāng)你創(chuàng)建了一個 A 類,這個類又 需要具有 B 類的實(shí)例, 你可以直接為 A 類添加 B 類類型的 屬性, 并引用 B 類的頭文件 #import "B.h"
這種方法可行,但是不夠優(yōu)雅,在 編輯一個使用 A 類的文件時候, 不需要知道 B 類的全部細(xì)節(jié), 只需要知道有一個 類名叫 B 就好, 所幸有個辦法能把這一切情況告訴編輯器 @calss B;
這叫做 '向前聲明' 該類
而 A 類的實(shí)現(xiàn)文件 .m文件 中則需要引入 B 類的頭文件, #import "B.h" 因?yàn)槿粢褂煤笳? 則必須知道其所有的接口細(xì)節(jié).
將引入頭文件的時機(jī)盡量延后,只有確有需要時才引入, 這樣就可以減少類的使用這所需引入頭文件的數(shù)量, 假設(shè) 把 B.h 引入到 A.h 中, 那么只要進(jìn)入 A.h, 就會一并引入 B.h 的所有內(nèi)容, 此過程若繼續(xù)下去, 則要引入許多根本用不到的內(nèi)容, 這當(dāng)然會增加編譯時間.
向前聲明 也解決了兩個類互相引用的問題, ?如果 A 類 和 B 類在各自的頭文件中引入對方的頭文件, 則會導(dǎo)致 "循環(huán)引用" ,當(dāng)解析其中一個頭文件時,編輯器會發(fā)現(xiàn)它引入的另一個頭文件, 而那個頭文件回過頭引用第一個頭文件, 使用 #import 而非 #include 指令雖然不會導(dǎo)致死循環(huán), 單卻以為著兩個類有一個無法被正確編譯
但是有時候必須要在頭文件中引入其他頭文件, 如果你寫的類繼承自某個超類, 則必須引入定義那個超類的 頭文件, 同理, 如果要聲明你寫的類遵從某個協(xié)議, 那么該協(xié)議必須有完整定義, 且不能使用向前聲明, 向前聲明只能告訴編譯器有某個協(xié)議, 而此時編譯器卻要知道該協(xié)議中定義的方法
總結(jié): 除非確有必要, 否則不要引入頭文件, 一般來說, 應(yīng)該某個類的頭文件中使用 向前聲明 來提及別的類, 并在實(shí)現(xiàn)文件中引入那些類的頭文件, 這樣做可以盡量降低類之間的 耦合