我有A类和B类,其中B是A的子类.A和B的创建成本都很高,但A和B非常相似。只有B上的几个字段与A上的字段不同。我有一个A实例,我需要将其变成B的实例。我的想法是尝试使用forwardInvocation。 B维护对A的引用,并将所有调用转发给A,除了B有自己的几个方法。在B上,我实现了forwardInvocation:
- (void)forwardInvocation:(NSInvocation *)anInvocation {
}
但它似乎没有被召唤。我还实现了respondsToSelector:和methodSignatureForSelector:但它们似乎也没有被调用。子类会发生什么不同吗?
答案 0 :(得分:0)
我原来问题的答案如下:
仅当向对象发送没有相应方法的消息时,才会调用forwardInvocation。在子类化的情况下,显然如果超类具有相应的方法,则不会调用forwardInvocation。这里的关键是让我的“代理”对象不是子类。我真正希望我的“代理”对象真正成为子类对象。我希望能够使用forwardInvocation,但我也希望有这样做的方法的好处:
- (void)doSomethingWithSelf {
[someObject doSomethingWith:self];
}
并让自己成为代理对象。