2013-06-28 59 views
0

類擴展名和頭文件究竟是什麼?有什麼區別?在頭文件中聲明屬性/方法與在類擴展中聲明有什麼區別。我對Objective-C是全新的,所以初學者的術語將是有益的:)類擴展名和頭文件

在此先感謝!

+0

通過類擴展,你的意思是'@ class'? – popctrl

+0

@AnonyLawrence,不,這是一個前向聲明。 – vikingosegundo

回答

2

顧名思義,它們擴展了這個類。類延續是另一個名字。類擴展通常用於聲明私有方法和屬性。您希望類擴展名對@implementation可見,並且不在頭文件中(即,您希望類擴展名和@implementation位於MONClass.m中)。

頭文件中的類型和方法一般都是公開的 - 任何客戶端都可以使用。

實例:類擴展聲明的財產將不可見/給誰#import頭客戶端訪問,但它會是由@implementation可用,因爲@implementation可以看到類擴展的聲明。

所以這可以用來模擬你的ivars和方法的受限訪問。這很有用,因爲ObjC方法和屬性不能指定爲private/protected/public(例如使用@public)。

類擴展與類別不同主要是因爲擴展可能會聲明存儲(例如,將生成後備ivars的屬性)。

+0

謝謝你,這是解釋它最有用的方法!特別是因爲我用Java編程:) – golddove

2

A 標頭文件(.h)是您在現有類中公開聲明屬性,方法和協議的地方。然後你可以導入這個文件,當然可以用它來實現。

擴展是另一個@interface在您的執行(.m)文件。這擴展了導入頭的內部實現,添加了一些方法,如果有人或其他人導入與該類相關聯的頭文件,這些方法將不可用。

有關詳細信息,請參閱Apple's documentation on customizing existing classes

1

問: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