从Method类型转换为SEL

时间:2011-11-07 23:58:00

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

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

我这样做了几年,以提取一个类的方法的所有名称。您可以使用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;
}

答案 2 :(得分:-2)

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

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

Apple在他们的Objective C tutorial中讨论了这个问题。