正如标题所说...我对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
最初返回 @"Hello"
,而我将其更改为 @"Hello World"
并重新编译,则上述代码将始终返回 @"Hello"
,直到我在模拟器中重新启动应用程序。
有人知道为什么会这样吗?并提供一个解决方案,以便在运行时重新加载此 .dylib 吗?