在运行时进行动态方法调用

25 浏览
0 Comments

在运行时进行动态方法调用

我的项目将与大量的旧代码一起编译(超过100个独立方法)。所有不同的旧方法将在我的项目中用于相同的目的,只是它们的执行方式不同。也就是说,它们的输入和输出大致相同,但是它们需要进行一些非常复杂的计算来获得这些输出,而这些计算方法在不同的方法之间可能会有很大差异。我预计在每个会话中只需要调用其中一个方法,但是下一个会话可能需要调用不同的方法。在我的项目中,当我准备调用其中一个方法时,用户将输入足够的信息,以便我能够确定要调用哪个方法。\n我可以通过一个庞大的if代码块来处理这个问题。我需要检查几个不同的条件。对于每种条件的组合,我将调用不同的旧方法之一。这种方法的问题是从可读性的角度来看非常糟糕-实际的if代码块可能会变成数百行长。我想象中,这么多不同的else-if语句可能也会有一些性能问题。\n我想做的是创建一个查找表,其中我存储要调用的方法的名称(作为字符串),并将其与我需要检查的不同条件配对。我的公司正试图转向使用更多的查找表,减少庞大的if代码块。\n有没有办法根据我从查找表中获取的“方法名称”字符串来调用方法?如果有,这样做的语法会是什么样子?还是有其他更好的处理方法我还没有考虑到?或者庞大的if代码块实际上更符合最佳实践?

0
0 Comments

在运行时进行动态方法调用(Dynamic Method Calls at Runtime)是一种常见的需求,可以使用NSInvocation来实现。NSInvocation允许你根据选择器创建一个方法调用,并在之后调用它。可以使用NSSelectorFromString根据字符串来创建选择器。下面是一个关于NSInvocation的教程:http://a-coding.com/making-nsinvocations/

除了使用NSInvocation之外,我不清楚还有其他实现这个需求的方法。但是我可以想象,这种方法可能会很难调试和追踪,尽管有时你不知道是否能成功实现,直到你实际去尝试。

我曾经使用NSInvocation来将一个应用程序置于“演示”模式。我创建了一个整个的NSSInvocations数组,然后每当我的定时器函数触发时,我会获取下一个调用并调用它,使我的应用程序表现得像有人在使用它一样。祝你好运!

0