是否可以强制Objective-C调用虚拟方法的特定实例,而不是通过标准虚拟消息调度?我知道这通常是一个糟糕的想法,但我想知道如何使用Objective-C运行时来完成它。例如,给定实现 - (void)foo的A和B类,其中B是A的子类,我想用B实例调用A上的foo方法(尽管B通常会处理这条信息)。非虚拟调用Objective-C函数
我知道我可以通过将A的foo方法的内容移动到一个新方法并委托给它来实现此目的,但我想找出通过Objective-C运行时执行此操作的一些方法。
注意:就本问题而言,假定我无法更改A或B的来源,并且我仔细权衡了破坏封装的风险。
为什么'[超级富]'不适合您的需求?你对你想要的内容的描述正是“super”关键字所做的。编辑:哦,除非像bbum描述,你要调用' - 从_outside_ B'的'一个实例[A FOO]'。 –
是的,我想一般称之为 - 不一定是从B.我不能在这一点上改变A或B的内容。 – slipheed
的OP使得它听起来就像他们对A(因此可能B)的控制,所以我有一种感觉'[超级富]'确实是最好/最简单的答案。 – matthias