我已经搜索过一段时间,但很惊讶没有人提出这个问题,所以我走了:
我有一个带有id参数的Objective-C方法。现在我想使用respondsToSelector:
来确定它是否对以下操作有效,如果不是,我有一个备份计划。 (这不是ASSERT(0)
:P)
所以,当有人试图搞砸我并通过(id)someC++Object
时,我当然会遇到大崩溃。
我的问题很简单:我可以安全地使一个C ++对象失败respondsToSelector:
,这样我就可以使用我的备份计划(面对一个编码器)吗?
答案 0 :(得分:4)
简而言之,你不能。
至少,不可靠而且没有任何理智的方式。坦率地说,也不应该打扰;面对基于C的语言,这种防御性编程水平是徒劳的。
至少,你需要:
通常,任何大量使用isKindOfClass:
和respondsToSelector:
(在委托模式之外)的代码都非常不符合Objective-C设计模式的规范。
或者,换句话说,你有一个静态类型检查编译器,它非常擅长在编译时检查大量有效参数。使用它。