ios中@class和 #import,兩種方式的討論

不少剛開始學習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.開發

  1. Import super classes
  2. Import parent classes (when you have children and parents)
  3. Import classes outside your project (like in frameworks and libraries)

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:

  • Any C or C++ value (a pointer or reference is not a physical dependency). If you have aCGPoint as an ivar or property, the compiler will need to see the declaration ofCGPoint .
  • Your superclass.
  • A method you use.

最後,我建議仍是養成良好的import習慣,不要偷懶都把import放在h文件中,不管參與的項目大小,養成良好的編程習慣很是重要。

相關文章
相關標籤/搜索