OC中 class的理解

2021-07-07 06:24:58 字數 871 閱讀 1832

當我們再看蘋果自己封裝的類的時候,經常會看到@class ***,我們知道@class ***是告訴編譯器有這樣乙個類,但是這個類裡面有什麼東西我們不知道。

一般來說,我們在使用某乙個類時,即當乙個類使用到另乙個類時,並且在類的標頭檔案中需要建立被引用的指標時,有兩種方法:

1.#import""    2 .   @class 

例如:#import"b.h"

@inte***ce a:nsobject

b  *b;

@end;

那麼這兩種方法有什麼不一樣呢?一般來說他們有以下幾點不一樣:

1.#import 引用的類,會獲取到這個類的所有資訊,包括被引用類的所有變數和方法,但是通過@class 引用被引用類時,只知道有這樣乙個類,告訴編譯器在a.h中 b *b只是類的宣告,具體要實現什麼方法,等實現檔案真正用到是,才會真正檢視b類中的小心。

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

3.通過上面兩點也反映在編譯效率上,假如有上百個頭檔案都#import 同乙個檔案,或者這個檔案又#import 很多檔案,那麼編譯起來會比較耗時,相對來說,@class不會出現這個問題

4.對於迴圈引用關係來說,a引用b,b又引用a,b類的**

#import"a.h"

@inte***ce b:nsobject

a *a;

@end;

這樣就會出現迴圈引用的問題。

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

所以,為了編譯效率,如果要在a.h 中宣告b的物件,可以用@class b 來應用,而在a.m中#import b.

oc中block的理解

block可能是我在學習objective c語法中遇到的第乙個puzzle的地方。確實,這個語法takes some getting use to.block實際是一種閉包,它是oc中對閉包的實現。閉包是什麼?清楚地記得這個是我去年在參加鵝廠的實習筆試的時候的乙個大題,記得沒錯是第二個大題。any...

import和 class在oc中的區別。

1.import會包含這個類的所有資訊,包括實體變數和方法,而 class只是告訴編譯器,其後面宣告的名稱是類的名稱,在編譯的時候,告訴編譯器,這是乙個類名,無需報錯。2.在標頭檔案中,一般只需要知道被引用的類的名稱就可以了。不需要知道其內部的實體變數和方法,所以在標頭檔案中一般使用 class來宣...

深入理解Objective c中 class的含義

原文 來自 在objective c中,當乙個類需要引用另乙個類,即建立復合關係的時候,需要在類的標頭檔案中建立被引用類的指標。如 car.h 實現類我們先省略,如果你直接這麼編譯,編譯器會報錯,告訴你它不知道tire和engine是什麼。這時候有兩個選擇,乙個是import這兩個被引用類的標頭檔案...