方法的条件实现

时间:2009-12-18 23:55:19

标签: iphone cocoa runtime

ok ..想想objectA .. objectA在其协议中定义了可选属性。代表可能会也可能不会实施这些,但如果您决定实施这些,您必须提供有效的回报。

现在如果我将objectA.delegate设置为objectB但是对象需要在编译时全部实现它们,并且在运行时将决定它可能支持哪些支持。 将它们全部实现为存根的问题意味着objectA将简单地使用'respondsToSelector'来查看委托是否正在尝试使用可选属性,如果是,则认为它们是有效的并使用它们。

由于objectB(委托)必须有条件地决定实现哪些,我能看到的唯一解决方案是使用'class_addMethod'。

我希望有一个更优雅,可能更优化的解决方案,但不确定它可能是什么。

2 个答案:

答案 0 :(得分:1)

任何时候你认为你需要使用class_addMethod()来实现某些东西,你几乎总是做错了。

根据您描述的内容 - 这是相当模糊的 - 一个简单的解决方案是创建既可以充当委托又可以根据需要有条件地转发方法的内容。

现在,您说如果委托 实现方法,必须返回有效值。如果是这种情况,class_addMethod()实际上并没有帮助。大多数实现委托的类将检查一次委托是否实现该方法,然后将假定它永远执行,除非委托更改。你可以经常接触转换代表的事情,但在这条道路上是疯狂的。

更好的答案可能是问一个问题; 你想做什么?

答案 1 :(得分:0)

是的,使用NSObject的+(BOOL)resolveInstanceMethod:(SEL)aSEL与class_AddMethod结合使用,并根据您想要的任何条件连接您想要的实现。不确定这是否是您正在寻找的。希望它有所帮助。