2010-11-23 52 views
0

可能重复:
List selectors for obj-c object目标C:在运行时实例的所有选择

有谁知道如何让一个实例在客观C运行时应对所有选择?

+0

[obj-c对象的列表选择器]的完全重复(http://stackoverflow.com/questions/330030/list-selectors-for-obj-c-object) – 2010-11-23 20:01:31

+1

您的意思是所有选择器实际上在响应期间做出响应一个特定的运行,或所有可以响应的选择器,在运行时确定? – 2010-11-23 21:20:47

回答

-1

dapptrace(Dtrace)是你的朋友。

手册页(man dapptrace)上:用户和 库函数

dapptrace打印细节要求

dapptrace针对的Dtrace脚本语言(D)编写的。这意味着您可以调整dapptrace或从其脚本文件中提取想法来做很多事情。例如:

等待myFunctionWhichCreatesSpecialObject被调用。存储它返回的对象地址(特殊对象)。打印出在该对象上调用的所有选择器。

您还可以直接调用dtrace编写简单的单线法术。我会让你去寻找那些。

-2

在运行时你可以使用

类方法 “+(BOOL)instancesRespondToSelector:(SEL)aSelector”

只要你知道你要检查的选择。

2

一般来说,这是不可能的。 “一个实例响应的选择器”可能是一个无限集合。例如,可以实现将罗马数字作为消息发送并返回相应整数值的类。如果你想知道在一个给定时间(这是一个不同的问题)由一个类实现的实例方法的精确集合,你可以使用Objective-C runtime functions来获得一个类的实例方法列表,并走上类树找到它从超类继承的那些。但是,这又是两件完全不同的事情。一个类可能有一个它选择不响应的消息的方法,它可能会响应那些没有直接相应方法的消息。