正如标题所说......我对dlopen()
感兴趣。我明白这是应用商店不允许的,但我对iOS的这一点很好奇。有没有办法让dlopen重新加载iOS上的dylib文件?
我的问题是,我可以创建一个名为.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);
}
这是从here采取加载此文件。
我遇到的问题是,如果我更改mydylib2.dylib,dlopen
不会加载重新编译的.dylib文件。而是解决旧版本的功能someMethod
。
例如,如果someMethod
第一回报@"Hello"
,我改变这是@"Hello World"
并重新编译,上面的代码将总是返回@"Hello"
,直到我重新启动在模拟器中的应用程序。
难道知道这是为什么吗?并建议一个解决方法,以便这个.dylib可以在运行时重新加载?
你有没有得到这个解决方案? – newenglander