【问题标题】:Obj-C introspection: How can a method reference its own selector?Obj-C 内省:方法如何引用自己的选择器?
【发布时间】:2012-01-15 22:04:08
【问题描述】:

我希望编写一个宏,用于在任何方法中使用,它引用方法的选择器。我不想传递方法的字面名称。例如:

#define RERUN [self performSelector:{something} withObject:nil afterDelay: 0.0]

上面的“{something}”将解析为使用宏的任何方法的选择器。

有没有办法做到这一点?

【问题讨论】:

    标签: objective-c methods selector introspection


    【解决方案1】:

    _cmd 表示当前方法的选择器——它是一个隐藏参数(如self)。

    如果您从不需要参数,或者 nil 适合您的目的 - 您需要做的就是写:

    #define RERUN [self performSelector:_cmd]
    

    【讨论】:

    • 你的 RERUN 与原来的略有不同——你的将在当前调用堆栈上发生,原来的将在当前运行循环上安排调用,但不会立即调用任何东西。
    • @Tommy 好点(+1)——出于这个原因,我认为原件很奇怪。不同之处(对于那些想知道的人)是我发布的实现将被立即调用(如果条件从未满足并导致堆栈溢出,它也可能无限递归)。使用afterDelay: 变体,self 将被保留,消息将在当前运行循环中排队并在未来发生。
    • 谢谢,_cmd 正是我想要的。就我而言,我的目的是专门为运行循环提供一些循环,然后重新调用该方法。
    • 不客气,afterDelay: 在这种情况下正是您想要的。
    【解决方案2】:

    方法得到一个隐式参数_cmd,它是选择器。

    【讨论】:

    • 谢谢。 _cmd 正是我想要的。
    猜你喜欢
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多