正如标题所说...我感兴趣dlopen()
。我知道应用商店不允许这样做,但我对 iOS 上的这一点很好奇。
我遇到的问题是我可以创建一个 .dylib 文件,并且可以在运行时使用以下代码加载该文件
char *dylibPath = "/Applications/myapp.app/mydylib2.dylib";
void *libHandle = dlopen(dylibPath, RTLD_NOW);
if (libHandle != NULL) {
NSString * (*someMethod)() = dlsym(libHandle, "someMethod");
if (someMethod != NULL) {
NSLog(someMethod());
}
dlclose(libHandle);
}
这是取自这里。
我遇到的问题是,如果我更改 mydylib2.dylib,dlopen
则不会加载重新编译的 .dylib 文件。相反,它解析了旧版本的函数someMethod
。
例如,如果someMethod
first 返回@"Hello"
并且我将其更改为@"Hello World"
并重新编译,则上面的代码将始终返回@"Hello"
,直到我在模拟器中重新启动应用程序。
有谁知道为什么会这样?并建议一种解决方法,以便可以在运行时重新加载这个 .dylib?