類擴展名和頭文件
回答
顧名思義,它們擴展了這個類。類延續是另一個名字。類擴展通常用於聲明私有方法和屬性。您希望類擴展名對@implementation
可見,並且不在頭文件中(即,您希望類擴展名和@implementation位於MONClass.m
中)。
頭文件中的類型和方法一般都是公開的 - 任何客戶端都可以使用。
實例:類擴展聲明的財產將不可見/給誰#import
頭客戶端訪問,但它會是由@implementation
可用,因爲@implementation
可以看到類擴展的聲明。
所以這可以用來模擬你的ivars和方法的受限訪問。這很有用,因爲ObjC方法和屬性不能指定爲private/protected/public(例如使用@public
)。
類擴展與類別不同主要是因爲擴展可能會聲明存儲(例如,將生成後備ivars的屬性)。
謝謝你,這是解釋它最有用的方法!特別是因爲我用Java編程:) – golddove
A 標頭文件(.h)
是您在現有類中公開聲明屬性,方法和協議的地方。然後你可以導入這個文件,當然可以用它來實現。
安擴展是另一個@interface
在您的執行(.m)
文件。這擴展了導入頭的內部實現,添加了一些方法,如果有人或其他人導入與該類相關聯的頭文件,這些方法將不可用。
有關詳細信息,請參閱Apple's documentation on customizing existing classes
問:What exactly are ... header files
答:頭文件 - 是一個文件,其內容編譯器的 '插入' 代替#import...
(#include
和其它類似的指示)線。頭文件包含公共代碼:類的前向聲明,枚舉,變量,函數和其他。
問:What exactly are class extensions …
答:Class Extension
- 是一個語言結構,它允許您擴展接口的類。
要更好地理解它是什麼,您必須瞭解什麼是類category
。
Category
- 是一種語言結構,它允許您向現有類添加功能(僅限方法!)。即使沒有子類。
實施例:
可以添加新的方法來NSImage中:
@interface NSImage(YourExtensionName)
- (CGImageRef)CGImage;
@end
甲Class Extension
(也稱爲類延續,或unnamed category
)具有一些相似性類別,但它只能被添加到類在編譯時你有源代碼。
在class extension
中,您可以在通常的@interface
塊中使用相同的東西。
問:What are difference
答:頭文件用來包括到程序一些能力(結構,數據類型,常數,函數等等之一)。類擴展使用擴展現有的類與一些功能。通常,class extension
是一個類的私有接口。由class extension
聲明的功能在原始類的@implementation塊中實現,因此您不能在框架類(例如Cocoa或Cocoa Touch類,如NSString)上聲明類擴展。
問:What is the difference between declaring a property/method in a header file vs in a class extension
答:如果你在頭文件中聲明屬性/方法,然後.h文件中的任何用戶都可以訪問到該屬性/方法。類擴展用於爲您的類聲明專用接口。
我強烈推薦給你看看蘋果的Objective-C Programming Guide。
- 1. 文件擴展名和C#
- 2. 同一頭文件中的類和類擴展(類別)
- 3. 文件擴展名
- 4. 文件擴展名[]
- 5. 文件擴展名
- 6. 文件擴展名
- 7. 文件擴展名
- 8. 文件擴展名
- 9. PHP文件名和擴展名恢復
- 10. powershell - 提取文件名和擴展名
- 11. 解析帶.php擴展名和php頭的xml文件
- 12. SQLite:.db文件擴展名.sqlite文件擴展名爲
- 13. 擴展文件類
- 14. 文件擴展名爲MIME類型
- 15. 獲取擴展類的文件名
- 16. 文本文件擴展名
- 17. bash:更改文件夾中所有頭文件的擴展名
- 18. 從頭文件下載時缺少文件擴展名
- 19. 將文件擴展名與文件頭進行比較
- 20. urlMapping中和文件擴展名
- 21. SAS宏變量和文件擴展名
- 22. 擊參數擴展和文件名
- 23. Flash player 10 Filereference.save和文件擴展名
- 24. 規範標籤和文件擴展名
- 25. m和mm文件擴展名難題
- 26. 隱藏文件夾和擴展名
- 27. Browserify,Babel和文件擴展名
- 28. 的URL CSS文件名和擴展
- 29. class.upload.php和文件擴展名丟失
- 30. TSaveDialog文件擴展名和[ofOverwritePromt]問題
通過類擴展,你的意思是'@ class'? – popctrl
@AnonyLawrence,不,這是一個前向聲明。 – vikingosegundo