歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Objective-C中@class和#import的區別

C/C++中使用#include來包含頭文件,缺點就是同一個頭文件可能被包含多次。

Objective-C中使用了#import來包含頭文件,優點就是同一個頭文件只能包含一次。

@class和#import是為了解決循環引用導致的死鎖問題

#import會包含這個類的所有信息,包括實體變量和方法,而@class只是告訴編譯器,其後面聲明的名稱是類的名稱,至於這個類是如何定義的,暫時不用考慮,後面會再告訴使用者。

在類的聲明.h文件中一般只需要知道被引用的類的名稱就可以了,不需要知道其內部的實體變量和方法,所以在類的聲明.h文件中一般使用@class來聲明這個名稱是類的名稱。而在實現類裡面。因為會用到這個引用類的內部的實體變量和方法,所以需要使用#import來包含這個被引用類的頭文件。

如果有循環依賴關系,如:A->B,B->A這樣的相互依賴關系,如果使用#import來相互包含,那麼就會出現編譯錯誤,如果使用@class在兩個類的頭文件中相互聲明,則不會有編譯錯誤出現。

所以一般來說@class是放在.h文件中的,只是為了在.h中引用這個類,把這個類作為一個類型來引用的。在實現這個.h文件的.m文件中,如果需要引用這個類的實體變量或者方法之類的,還是要用#import。

Copyright © Linux教程網 All Rights Reserved