正如標題所說......我對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