我偶然發現了https://github.com/AlanQuatermain/aqtoolkit/blob/master/Extensions/NSObject%2BProperties.h什麼括號在接口聲明
做的接口定義爲:
@interface NSObject (AQProperties)
什麼是(AQProperties)
部分呢?
我偶然發現了https://github.com/AlanQuatermain/aqtoolkit/blob/master/Extensions/NSObject%2BProperties.h什麼括號在接口聲明
做的接口定義爲:
@interface NSObject (AQProperties)
什麼是(AQProperties)
部分呢?
它被稱爲「類別」。
@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
他們是categories - 擴展現有的類沒有子類化的好方法。
綜上所述,您的NSObject (AQProperties)
定義了一個NSObject
以及一些與AQProperties
有關的額外方法。
與子類不同,您只能將方法添加到類別中,而不是額外的數據成員。
確定。然後我宣佈排序的接口: #進口「NSObject的+ Properties.h」 @interface GFDictionaryInitiable:NSObject的 但是,當我嘗試訪問我的類別定義的方法,我得到如下: - [GFRestaurant hasPropertyNamed:]:發送給實例的無法識別的選擇器。 GFRestaurant是GFDictionaryInitiable的一個實例。 我錯過了什麼? –
GFDictionaryInitiable或**子類**的'GFRestaurant' **實例**?讀取錯誤信息,GFRestaurant似乎是一個子類。 – Dirk
子類:@interface GFRestaurant:GFDictionaryInitiable –