-
當(dāng)我們在定義一個類C1的接口時,通常會在聲明方法的時候,使用到另外一個類C2作為方法的參數(shù),當(dāng)時這個類并不知道這個作為參數(shù)類的任何信息傲宜,于是我們通常會直接把作為參數(shù)的類C2的頭文件直接導(dǎo)入到正在創(chuàng)建類C1的頭文件中。這種做法可以解決眼前的問題讯屈,但是這種做法很糟糕蛋哭。理由有兩點:
- 當(dāng)有其他的類C3需要用到C1類的時候,我們?nèi)绻€是按照這個方法導(dǎo)入C1頭文件涮母,那么C2頭文件也會被導(dǎo)入谆趾,如果還有一個類C4要用到C3,那么其導(dǎo)入的頭文件就更多了叛本。所以沪蓬,這種做法會增加編譯時間。
- 如果有兩個類C1和類C2来候,他們互相引用跷叉,就會產(chǎn)生到底是先有雞還是先有蛋的這種問題(循環(huán)引用)。當(dāng)其中一個類C1進行語法解析的時候,它會導(dǎo)入另外一個類C2云挟,C2這個類又導(dǎo)入了C1梆砸。這種導(dǎo)入(#import)會陷入無限循環(huán),最后的結(jié)果是园欣,沒有一個類能夠被正確的編譯帖世。
為了解決這些存在的問題,一種更佳的實踐方案是沸枯,在類C1的頭文件中使用 @class 命令(@class C2;)日矫,在實現(xiàn)文件中導(dǎo)入C2(#import "C2"),在C2文件中的做法與此同理绑榴。
2 . 在聲明一個類遵從某項協(xié)議時哪轿,我們不能使用向前聲明,取而代之的做法是翔怎,把協(xié)議編碼在單獨的一對文件中窃诉,然后在類的聲明中導(dǎo)入這對文件(.h /.m)的頭文件。