不少剛開始學習iOS開發的同窗可能在看別人的代碼的時候會發現有部分#import操做寫在m文件中,而h文件僅僅使用@class進行聲明,不由納悶起來,爲何不直接把#import放到h文件中呢?編程
這是由於h文件在修改後,全部import該h文件的全部文件必須重 新build,所以,若是把#import寫在h文件中,import該h文件的文件也就會產生沒必要要的編譯,增長編譯時間,特別是在項目文件多的狀況 下。想象一下,若是隻是修改一個h文件而致使上百個文件沒必要要的編譯,那是一件多麼讓人糾結的事情。。。ide
對於@class只是告訴編譯器有這個class,請不要報錯或警告,所以不會給編譯形成影響。學習
何時用@class這種方式聲明比#import好呢?ui
stackoverflow上的高手們給了很多建議:.net
Randy Marsh:three
When I develop, I have only three things in mind that never cause me any problems.開發
For all other classes (subclasses and child classes in my project self), I declare them via forward-class.get
Justin:編譯器
Simple answer: You #import or #include when there is a physical dependency. Otherwise, you use forward declarations (@class MONClass ,struct MONStruct , @protocol MONProtocol ).io
Here are some common examples of physical dependence:
最後,我建議仍是養成良好的import習慣,不要偷懶都把import放在h文件中,不管參與的項目大小,養成良好的編程習慣很是重要。