【发布时间】:2011-12-24 01:38:35
【问题描述】:
我正在使用 Objective-C 运行时库函数 class_copyMethodList() 来获取我的类中所有方法的列表。然后如何将这些类型的 Method 对象转换为可用的类型 SEL 对象?
【问题讨论】:
标签: ios objective-c methods selector objective-c-runtime
我正在使用 Objective-C 运行时库函数 class_copyMethodList() 来获取我的类中所有方法的列表。然后如何将这些类型的 Method 对象转换为可用的类型 SEL 对象?
【问题讨论】:
标签: ios objective-c methods selector objective-c-runtime
在返回的 Method 对象上运行函数 method_getName()。
【讨论】:
几年前我这样做是为了提取类方法的所有名称。您可以使用 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。将其转换为字符串并返回似乎有点傻。
假设您有方法的名称,您可以使用NSSelectorFromString 函数将其转换为选择器。
SEL fooSelector = NSSelectorFromString ( @"foo:" ) ;
Apple 在其Objective C tutorial 中讨论了这一点。
【讨论】: