2013-10-17 99 views

回答

1

它被稱爲「類別」。

@interface NSString (MyFancyStuff) 
- (NSString*) stringByCopyingStringAndReplacingDollarCharsWithEuros; 
- (NSUInteger) lengthIgnoringWhitespace; 
@end 

然後,您可以實現這些新方法和往常一樣

@implementation NSString (MyFancyStuff) 
- (NSString*) stringByCopyingStringAndReplacingDollarCharsWithEuros 
{ 
    ... 
} 

- (NSUInteger) lengthIgnoringWhitespace 
{ 
    ... 
} 
@end 

:您可以將您的方法來命名的類別擴展現有的類,即使你沒有爲他們的源代碼,這些新方法則表現得像的NSString所有其他方法(前提是,你沒有包含頭文件,在這裏你聲明的類):

NSString* text = [NSString stringWithFormat: @"Hello, %@", param]; 
NSUInteger length = [text lengthIgnoringWhitespace]; 

... 

除了是ool擴展類,你的代碼沒有,類也可以用來構造你自己的類的接口。例如:

FancyStuff.h

@interface FancyStuff 
// Public methods and properties are declared here 
@end 

FancyStuff + Protected.h

#import "FancyStuff.h" 

@interface FancyStuff (Protected) 
// Methods, which may be useful for classes, which derive from 
// FancyStuff, but should not be considered part of the public API 
@end 

FancyStuff.m

#import "FancyStuff+Protected.h" 

@implementation FancyStuff 
... 
@end 

@implementation FancyStuff (Protected) 
... 
@end 
+0

確定。然後我宣佈排序的接口: #進口「NSObject的+ Properties.h」 @interface GFDictionaryInitiable:NSObject的 但是,當我嘗試訪問我的類別定義的方法,我得到如下: - [GFRestaurant hasPropertyNamed:]:發送給實例的無法識別的選擇器。 GFRestaurant是GFDictionaryInitiable的一個實例。 我錯過了什麼? –

+0

GFDictionaryInitiable或**子類**的'GFRestaurant' **實例**?讀取錯誤信息,GFRestaurant似乎是一個子類。 – Dirk

+0

子類:@interface GFRestaurant:GFDictionaryInitiable –

1

他們是categories - 擴展現有的類沒有子類化的好方法。

綜上所述,您的NSObject (AQProperties)定義了一個NSObject以及一些與AQProperties有關的額外方法。

與子類不同,您只能將方法添加到類別中,而不是額外的數據成員。