iOS中的#import和class區別


 下面來說一下#import同class之間的區別

     在ios中我們經常會在.h和.m中引入一些類啊等等一般用的是#import來進行聲明,你們可能也見到在.h文件進用@class來聲明的,那么#import和@class進行聲明 到底有什么的區別呢?下面我來說說

  1.import會包含這個類的所有信息,包括實體變量和方法,而@class只告訴編 譯器,聲明的類的名稱,至於這些類是如何定義的,暫時不用考慮,后面會再告訴你,所以在頭文件中如果用@class聲明某個類后,在.m的實現中如果用到聲明類的具體方法或變量時還得再#import類  

2.在.h頭文件中進行聲明時用#import的話,如果100個頭文件都#import同一個頭件,或者這些文件是依次引用的,如A->B,B->C,C->D,當最開始的那個頭文件有變化后進行編譯時,后面所有引用它的類都需要重新編譯,如果引用最開始的頭文件的類很多的話,那么這將耗費大量的時間,而用@class則不會,可能有人會想即然.h只是用@class只是簡單的一個聲明告編譯器有這個類不讓其報錯,那么.m中要用到引入的類的方法和屬性時,不還是要#import頭文件一次,是的這個是對的,但編譯器編譯的時候只編譯頭文件的,所以你的.m中用#import與編譯時間沒太大關系

3.接下來說說什么時候該用@class,什么時候該用#import進行聲明,

  (1)一般如果有繼承關系的用#import,如B是A的子類那么在B中聲明A時用#import

  (2) 另外就是如果有循環依賴關系,如:A->B,B->A這樣相互依賴時,如果在兩個文件的頭文件中用#import分別聲明對方,那么就會出現頭文件循環利用的錯誤,這時在頭文件中用@class聲明就不會出錯

 (3)還有就是自定義代理的時候,如果在頭文件中想聲明代理的話如@interface SecondViewController:UIViewController<XXXDelegate>時應用#import不然的話會出錯誤,注意XXXXDelegate是自定義的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM