【问题标题】:List the selectors an instance of a class responds to [duplicate]列出类实例响应的选择器[重复]
【发布时间】:2013-08-12 03:51:15
【问题描述】:

是否可以获得给定类的实例响应的所有选择器的列表?

【问题讨论】:

标签: objective-c reflection runtime selector


【解决方案1】:

是的。 copyMethodList() 返回已实现方法的列表。可能有更多选择器,实例将使用转发机制进行响应。

class_copyMethodList() 只复制在类层次结构的这个阶段实现的方法。要获得所有内容,您必须迭代超类:

Class class = object_getClass( instance );
while( class != Nil )
{
   // copy method list 
   class = class_getSuperclass( class );
}

【讨论】:

  • 这不是严格意义上的类响应的选择器列表;一个类可以通过其他方式响应,而不是通过实现具有相同名称的方法——通过转发或在运行时解析选择器。
  • 没错,只是方法列表。但是,如果没有实现方法,则无法找出类的实例响应哪些选择器。但在大多数情况下,这无关紧要。无论如何,我添加了一个说明。
  • 是的;据我所知,您必须获取在运行时注册的所有选择器的列表,并询问实例中的每一个选择器——而且该列表也不公开。
【解决方案2】:

如果选择器没有隐藏,您可以输入[instanceName(后面有一个空格),然后点击ESC。将弹出一个下拉菜单,为您提供可见选择器的列表。

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多