【问题标题】:How to call class method from NSString in obj-c?如何在 obj-c 中从 NSString 调用类方法?
【发布时间】:2011-09-09 23:00:06
【问题描述】:

在obj-c中,怎么调用

[myClass myString];

在哪里myString = @"myMethod";

应该相当于[myClass myMethod];

不确定这种元语言操作是否可行。

【问题讨论】:

    标签: iphone objective-c ios nsstring meta


    【解决方案1】:

    或者,如果您在参数和/或返回类型方面需要比 performSelector: 更大的灵活性并且朋友会给您,请查看 NSInvocation 类。

    【讨论】:

      【解决方案2】:
      [myClass performSelector: NSSelectorFromString(myString)];
      

      文档:

      【讨论】:

        【解决方案3】:

        [myClass class] 返回元类,在元类上调用类方法。例如

        [NSString someClassMethod];
        
        NSString *instanceOfString = @"some string instance";
        [[instanceOfString class] someClassMethod];
        

        编辑:我误读了这个问题。使用 NSSelectorFromString 从 NSString 获取 SEL。这记录在 Apple 的 Foundation Functions Reference 中,您还会在其中看到 NSClassFromString、NSStringFromClass、NSStringFromSelector、NSStringFromProtocol 和 NSProtocolFromString 等。

        【讨论】:

        • 这就是元类。我的问题是关于方法调用部分,即我知道类,但我只有一个字符串用于调用什么方法。
        • 哦,误会了。 NSSelectorFromString 是要走的路。我会进行编辑,但我最终会得到与 Tom Jefferys 和 JeremyP 大致相同的答案。
        • 对喧嚣给予的分数。 :)
        【解决方案4】:
        SEL mySelector = NSSelectorFromString(@"myMethod");
        [myClass performSelector:mySelector];
        

        【讨论】:

          【解决方案5】:

          您可以使用NSSelectorFromString,类似以下内容应该可以:

           SEL selector = NSSelectorFromString(@"myMethod");
           [myClass performSelector:selector withObject:nil];
          

          【讨论】:

            猜你喜欢
            • 2018-02-11
            • 1970-01-01
            • 1970-01-01
            • 2018-03-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多