子類可能重複:
How to inherit from NSDictionary?如何從的NSMutableDictionary
從API據,我要覆蓋的方法:
setObject:forKey:
removeObjectForKey:
initWithObjects:forKeys:
count
objectForKey:
keyEnumerator
你能提供一個關於如何重寫它們的例子?
子類可能重複:
How to inherit from NSDictionary?如何從的NSMutableDictionary
從API據,我要覆蓋的方法:
setObject:forKey:
removeObjectForKey:
initWithObjects:forKeys:
count
objectForKey:
keyEnumerator
你能提供一個關於如何重寫它們的例子?
這實際上比僅僅繼承NSMutableDictionary更復雜。 NSMutableDictionary(和同樣NSMutableArray)是不透明的類。這就是說,它們僅僅是隱藏動態數據結構的接口,而不像通常的具體類一樣。特別是當你創建一個NSMutableDictionary時,你會得到一個利用NSMutableDictionary接口的類,但實際上並不是一個NSMutableDictionary!這意味着返回的班級實際上不會成爲你的班級,Yikes!子類NSMutableDictionary實際上是實現具有自定義功能的NSMutableDictionary接口。
你需要做的是讓你的子類有一個數據結構作爲成員變量(最簡單的就是一個NSMutableDictionary),並在你實現你的覆蓋方法時使用該類。
例如:
@interface MyMutableDictionary : NSMutableDictionary
... interface methods ...
@end
和
@implementation MyMutableDictionary
{
NSMutableDictionary* _proxy;
}
- (id) init {
if (self = [super init]) {
_proxy = [[NSMutableDictionary alloc] init];
}
return self;
}
... implementation of methods ...
- (void) setObject:(id)obj forKey:(id)key {
if (obj) {
[_proxy setObject:obj forKey:key];
} else {
[_proxy removeObjectForKey:key];
}
}
@end
這個例子是一個人爲一個說明如何實現自定義的NSMutableDictionary設置爲零對象時不拋出異常,而是去除帶有該鍵的對象。對於任何剩下的方法,您只需直接使用forwardingTargetForSelector:方法,以便您可以讓_proxy成員接管任何未實現的方法(儘管您需要繼承NSObject的子類,並顯式聲明所需的所有可用於您的可變字典的方法 - 這是因爲否則將使用真正的NSMutableDictionary方法,這將不起作用)。
- (id) forwardingTargetForSelector:(SEL)aSelector
{
return _proxy;
}
您能否給出一些上下文?你在用什麼? –
也相關:http://stackoverflow.com/questions/1268261/inheritance-issues-in-objective-c – Chuck