【问题标题】:Type cast from Method to SEL从 Method 类型转换为 SEL
【发布时间】:2011-12-24 01:38:35
【问题描述】:

我正在使用 Objective-C 运行时库函数 class_copyMethodList() 来获取我的类中所有方法的列表。然后如何将这些类型的 Method 对象转换为可用的类型 SEL 对象?

【问题讨论】:

    标签: ios objective-c methods selector objective-c-runtime


    【解决方案1】:

    在返回的 Method 对象上运行函数 method_getName()

    【讨论】:

      【解决方案2】:

      几年前我这样做是为了提取类方法的所有名称。您可以使用 NSSelectorFromString() 从每个名称中获取 SEL。

      + (NSArray *) methodNamesForClass:(Class) aClass
      {
          Method *methods;
          unsigned int methodCount;
          if (methods = class_copyMethodList(aClass, &methodCount))
          {
              NSMutableArray *results = [NSMutableArray arrayWithCapacity:methodCount];
              while (methodCount--) 
                  [results addObject:[NSString stringWithCString: sel_getName(method_getName(methods[methodCount])) 
                                                        encoding: NSASCIIStringEncoding]];
              free(methods);  
              return results;
          }
      
          return nil;
      }
      

      【讨论】:

      • 您已经在 sel_getName() 阶段拥有 SEL。将其转换为字符串并返回似乎有点傻。
      • 当我写这篇文章时,我需要的是名字。
      【解决方案3】:

      假设您有方法的名称,您可以使用NSSelectorFromString 函数将其转换为选择器。

      SEL fooSelector = NSSelectorFromString ( @"foo:" ) ; 
      

      Apple 在其Objective C tutorial 中讨论了这一点。

      【讨论】:

      • 他有一个 Method 值列表,而不是 NSStrings 命名选择器。
      • 是的,但我可以使用 method_getName() 方法嵌套并从中获取选择器
      猜你喜欢
      • 2021-04-13
      • 1970-01-01
      • 2019-07-02
      • 2023-03-19
      • 2015-11-01
      • 2017-07-15
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多