杀进程后,会先执行全局对象的析构函数,再销毁堆内存,析构全局对象后,如果还在访问该对象,那么会发生crash.
解决方案:
将全局对象改为指针并在堆上分配。
不要释放掉全局对象,也就是阻止全局对象调用析构函数,Apple平台(iOS/MacOS)可以在对象声明前加上
[[clang::no_destroy]]
,比如:[[clang::no_destroy]] MyClass obj;
,这样编译后的代码保证不会调用这个对象的析构函数。
杀进程后,会先执行全局对象的析构函数,再销毁堆内存,析构全局对象后,如果还在访问该对象,那么会发生crash.
解决方案:
将全局对象改为指针并在堆上分配。
不要释放掉全局对象,也就是阻止全局对象调用析构函数,Apple平台(iOS/MacOS)可以在对象声明前加上[[clang::no_destroy]]
,比如:[[clang::no_destroy]] MyClass obj;
,这样编译后的代码保证不会调用这个对象的析构函数。