dev*_*os1 4 reflection objective-c
是否有任何Objective-C运行时函数允许我从标识函数的字符串中获取函数(或块)指针?我需要一些方法来动态查找和调用函数或静态方法,基于识别它的某种形式的字符串.
理想情况下,此函数应该能够存在于任何动态加载的库中.
查看Objective-C运行时参考,最好的选择看起来像class_getClassMethod,但在此参考中似乎没有任何与功能相关的功能.是否有其他原始C方式获取指向函数的名称?
如果要调用某个静态objc方法,可以将其作为类的类方法
@interface MyClas : NSObject
+ (int)doWork;
@end
Run Code Online (Sandbox Code Playgroud)
并通过调用方法
[[MyClass class] performSelector:NSSelectorFromString(@"doWork")];
Run Code Online (Sandbox Code Playgroud)
如果你真的想使用C风格的函数指针,你可以检查dlsym()
dlsym()返回由以null结尾的字符串符号指定的代码或数据位置的地址.搜索哪些库和包取决于handle参数如果使用特殊句柄RTLD_DEFAULT调用dlsym(),则按顺序搜索过程中的所有mach-o图像(除了那些用dlopen(xxx,RTLD_LOCAL)加载的图像)装了.这可能是一次代价高昂的搜索,应该避免.
所以你可以用它来找到基于asymbol名称的函数指针
不知道为什么要这样做,有时候使用功能表可以做到
typedef struct {
char *name,
void *fptr // function pointer
} FuncEntry;
FuncEntry table[] = {
{"method", method},
{"method2", method2},
}
// search the table and compare the name to locate function, you get the idea
Run Code Online (Sandbox Code Playgroud)