aro*_*oth 6 inheritance cocoa-touch objective-c nsinvocation
我正在尝试使用一个NSInvocation从子类调用超类方法.涉及的代码相对简单,如下所示:
- (NSInvocation*) invocationWithSelector:(SEL)selector {
NSInvocation* call = [[NSInvocation alloc] init];
[call retainArguments];
call.target = super; //ERROR: use of undeclared identifier 'super'
call.selector = @selector(selector);
return call;
}
Run Code Online (Sandbox Code Playgroud)
这对我来说有点奇怪,因为我一直认为它super遵循的规则几乎相同self(即它可以被视为对相关对象的直接引用并分配给变量,用作返回值等) .看来实际情况并非如此.
无论如何,是否有任何简单的方法来让我NSInvocation的目标超类实现(我不能self用作目标,因为子类重写超类方法),或者我是否需要寻找其他方法?
请参阅Objective-C中究竟是什么超级?有关更多信息,但超级实际上不是一个对象.Super是编译器生成obj-c运行时调用的关键字(特别是objc_msgSendSuper).基本上,它就像在将类传递给它的超类之前发送消息.
编辑因此,如果您覆盖了要调用的方法,则必须编写另一个方法来直接调用[super method]并将调用设置为调用该方法.运行时只会向对象发送消息,它们将在实现它们的继承链的最低成员处理.
| 归档时间: |
|
| 查看次数: |
2704 次 |
| 最近记录: |