我有一个已编译的外部库,我正在使用我的(Objective-C ++)代码。该库有一个单例类,用于在使用的应用程序的整个持续时间内存储一些信息。我真的需要一种能够删除加载的信息并在应用程序中间重新加载它的方法。或者重新加载应用程序,以便重新初始化此单例。
在头文件中无法重置类信息。
我获得它的实例的方式是:
Singleton::getInstance();
在头文件中,它显示为:
static Singleton& getInstance();
我想要一种能够删除此实例并重新初始化另一个实例的方法。
有没有办法做到这一点?这个单例只用在一个(主)线程上。
当应用程序首次加载时,我必须调用:
Singleton::getInstance().load();
以便它从应用程序的Documents目录加载信息并创建内部结构。我在应用程序运行过程中替换Documents目录中的那些文件,我希望它重新初始化。如果我再次调用上面的函数,我会收到一个错误,因为写这个库的人不允许调用加载函数两次。
我尝试了一些类似的东西:
delete &Singleton::getInstance();
但我不知道我之后应该如何重新初始化它。正如呼叫
Singleton::getInstance();
崩溃了应用。
答案 0 :(得分:1)
除非API为您提供了一种方法,否则它可能是不可能的。
但是在调用delete ...后,我会尝试重新运行“load”函数。
答案 1 :(得分:0)
尝试在dinamic链接库中实例化Singleton,而不是在您自己的应用程序中实例化。如果需要重新实例化,请卸载dll(或.so,具体取决于您运行的操作系统)模块并重新加载。
不确定这是否有效,但我想这值得一试。
稍后编辑:刚注意到iOS标签。不知道iOS是否具有动态可加载模块,因此我的回答可能不适用。