你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> IOS強化知識(2)@class的運用

IOS強化知識(2)@class的運用

編輯:關於IOS

1、為什麼使用@class

與C++語言一樣,OC也需要一個頭文件(h文件),一個實現文件(m文件)。當你引用其他類的時候,你就需要引入頭文件。雖然引用頭文件沒有任何問題,但是如果你不想知道這個類的細節,只想知道它僅僅是個類的話,引用頭文件可能顯得多余,而且會增加編譯的時間。用@class的話,你可以不引入任何頭文件,就能讓編譯器知道某個它是一個類。例如:

@class B;

@interface A:NSObject

@property B* b;

@end;

極端情況講,如果有成千上萬個類都引入同一個頭文件,當這個頭文件所對應的類發生變化和改動,那麼這些引入頭文件的類都需要重新編譯,而@class 不受此影響。

@class還能解決一個重要的問題,就是依賴循環關系。即當兩個類相互引用的時候,不管你先引用哪一個頭文件,都會出現另一個類未定義。比如:

//// A.h

@interface A:NSObject

@property B* b; /////先引入A.h B此時未定義 編譯出現錯誤

@end;

//// B.h

@interface B:NSObject

-(void)setFriend:(A*)a; ////先引入B.h A此時未定義 編譯出現錯誤

@end;

我們通過@class 輕松解決這個問題

//// A.h

@class B;

@interface A:NSObject

@property B* b; /////前向聲明B 編譯通過

@end;

//// B.h

#import "A.h"

@interface B:NSObject

-(void)setFriend:(A*)a; ////引入A.h A被聲明,編譯通過 注:A類也可以進行前向聲明

@end;

2、有時候必須引入頭文件

當你需要繼承的時候,你必須引入頭文件,知道其完整的定義。當你實現某個協議的時候,同樣的道理。所以我們最好把協議單獨放在一個頭文件裡。

當然最好還是能不引入頭文件就不引入,如果需要引入一些頭文件的時候,也可以考慮放到分類(category)中,這樣的好處是增加編譯的效率和降低類之間的耦合。

今天要點:

除非有必要,否則不引入頭文件。這樣做可以降低耦合,減少編譯時間。

無法前向聲明時,盡量把引入頭文件的操作放到category中。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved