天天看點

IOS基礎:深入了解Objective-c中@class 和#import的差別

      在面向對象objective-C語言中,當一個類使用到另一個類時,并且在類的頭檔案中需要建立被引用的指針時,可以#import方式引入,通過@class引入;

這兩種的方式的差別在于:

1、運用#import方式:會包含被引用類的所有資訊,包括被引用類的變量和方法;

    運用@class方式:告訴編譯器隻是類的聲明,具體這個類裡有什麼資訊,如何定義的,這裡不需要知道,等實作檔案中真正要用到時,才會真正去檢視被引用類中的資訊(屬性,方法);

2、在頭檔案中, 一般隻需要知道被引用的類的名稱就可以了。不需要知道其内部的實體變量和方法,是以在頭檔案中一般使用@class來聲明這個名稱是類的名稱。 而在實作類由于要用到這個引用類的内部的實體變量和方法,是以需要使用#import來包含這個被引用類的頭檔案。  

3、通過上面2點也很容易知道在編譯效率上,如果有上百個頭檔案都#import了同一 個檔案,或者這些檔案依次被#improt(A->B, B->C,C->D…),一旦最開始的頭檔案稍有改動,後面引用到這個檔案的所有類都需要重新編譯一遍,這樣的效率也是可想而知的,而相對來 講,使用@class方式就不會出現這種問題了;

  •   總結:由上可知,@class是放在interface中的,隻是為了在interface中引用這個類,把這個類作為一個類型來用的。如果需要引用到被引用類的實體變量或者方法時, 在實作類中還需要使用#import方式引入被引用類。簡單來說:使用@class關鍵字,使其編譯通過, 使用#improt關鍵字,使其運作通過。

#import和#include的差別

     當我們在代碼中使用兩次#include的時候會報錯:因為#include相當于拷貝頭檔案中的聲明内容,是以會報重複定義的錯誤

但是使用兩次#import的話,不會報錯,是以他可以解決重複導入的問題,他會做一次判斷,如果已經導入一次就不導入了

參考例子:http://www.itnose.net/detail/6166995.html 

轉載于:https://www.cnblogs.com/dreamDeveloper/p/6023665.html