IOS基礎中 class的含義

2021-08-03 10:10:14 字數 1576 閱讀 3142

objective-c中,當乙個類使用到另乙個類時,並且在類的標頭檔案中需要建立被引用的指標時,

如下面**:

a.h檔案

#import "b.h"  

@inte***ce a : nsobject    

@end  

為了簡單起見:a類是引用類,b類是被引用類,這裡先不考慮a類的實現檔案。

通常引用乙個類有兩種辦法:

一種是通過#import方式引入;另一種是通過@class引入;

這兩種的方式的區別在於:

1、#import方式會包含被引用類的所有資訊,包括被引用類的變數和方法;@class方式只是告訴編譯器在a.h檔案中 b *b 只是類的宣告,具體這個類裡有什麼資訊,這裡不需要知道,等實現檔案中真正要用到時,才會真正去檢視b類中資訊;

2、使用@class方式由於只需要只要被引用類(b類)的名稱就可以了,而在實現類由於要用到被引用類中的實體變數和方法,所以需要使用#importl來包含被引用類的標頭檔案;

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

4、對於迴圈依賴關係來說,比方a類引用b類,同時b類也引用a類,b類的**:

#import "a.h"  

@inte***ce b : nsobject    

@end  

當程式執行時,編譯會報錯, 

當使用@class在兩個類相互宣告,就不會出現編譯報錯。

由上可知

,@class是放在inte***ce中的,只是在引用乙個類,將這個被引用類作為乙個型別,在實現檔案中,如果需要引用到被引用類的實體變數或者方法時,還需要使用#import方式引入被引用類。

如:#import "a.h" 

#import "b.h" 

@implementation a   

......  

舉個例子說明一下。

在classa.h中

#import classb.h 相當於#include整個.h標頭檔案。如果有很多.m檔案#import classa.h,那麼編譯的時候這些檔案也會#import classb.h增加了沒必要的#import,浪費編譯時間。在大型軟體中,減少.h檔案中的include是非常重要的。

如果只是 classb 那就沒有include classb.h。僅需要在需要用到classb的.m檔案中 #import classb.h

那麼什麼時候可以用呢?

如果classa.h中僅需要宣告乙個classb的指標,那麼就可以在classa.h中宣告

@classb

...classb *pointer;

所以,一般來說,@class是放在inte***ce中的,只是為了在inte***ce中引用這個類,把這個類作為乙個型別來用的。 在實現這個介面的實現類中,如果需要引用這個類的實體變數或者方法之類的,還是需要import在@class中宣告的類進來. 

CSS中class的 連著寫的含義

在使用css的class屬性中,我們寫的最多的就是乙個class 後面有多個屬性值連線在一起,然後對映到具體的樣式中去,例子 btn btn one btn two 解釋 舉例如下 123 各自寫各自的樣式 btn btn one btn two 理解如下 在a標籤上有各自的樣式,後面的樣式覆蓋前面...

iOS關鍵字含義(基礎)

strong與weak是由arc新引入的物件變數屬性 xcode 4.2 ios sdk4.3和以下版本 和之前的版本使用的是retain和assign,是不支援arc的。xcode 4.3 ios5和以上版本 之後就有了arc,並且開始使用 strong與weak assign 用於非指標變數。用...

ios 基礎用法之 7 class

原文 objective c中,當乙個類使用到另乙個類時,並且在類的標頭檔案中需要建立被引用的指標時,如下面 a.h檔案 import b.h inte ce a nsobject end 為了簡單起見 a類是引用類,b類是被引用類,這裡先不考慮a類的實現檔案。通常引用乙個類有兩種辦法 一種是通過 ...