跨平层开发之C++全局对象的析构导致的崩溃(IOS平台)
2021/7/9 20:35:48
本文主要是介绍跨平层开发之C++全局对象的析构导致的崩溃(IOS平台),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
如题是前段时间遇到并处理的BUG,解决方案是抄这位老哥的《深入解构iOS系统下的全局对象和初始化函数》中提到的方案—利用atexit机制注册资源回收,以及处理其它单例对象全局对象的依赖,特别是要处理工作线程的退出等等。参考资料也收集了几篇跟本主题相关的,建议大家也看看。
另外自己也有写了简单的示例《通过一个示例看全局对象的构造和析构以及atexit的使用》——展示全局对象的析构跟atexit的使用,大家可以参考之。
当时我们的SDK在实现上有一个全局对象,同时有些单例,还有独立的SDK工程线程之类的。当用户手动kill掉应用时,全局对象被析构后,工作线程还在运行,然后有相关的回调又调用到全局对象的成员,导致了Heap Corruption的崩溃
经验总结是:一个SDK或APP中的全局对象需要重点reiview,其它模块或对象对它的依赖情况,还有工作线程是否会调用到全局对象等,在应用退出时要停止线程,回收相关的资源,以及断开对全局对象的依赖
参考资料
- 深入解构iOS系统下的全局对象和初始化函数
- iOS监测应用被杀死并做一些处理
- 关于全局变量引发的内存问题探源
- C++又一坑:动态链接库中的全局变量
这篇关于跨平层开发之C++全局对象的析构导致的崩溃(IOS平台)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-05feign默认connecttimeout和readtimeout是多少-icode9专业技术文章分享
- 2024-07-05idea控制台,日志太多,导致部分想看得日志被刷走 搜不到-icode9专业技术文章分享
- 2024-07-05The server selected protocol version Tls10 is not accepted by client preferences [TLs12]-icode9专业技术文章分享
- 2024-07-05怎么清理项目缓存-icode9专业技术文章分享
- 2024-07-04安装 Eyoucms详细图文教程-icode9专业技术文章分享
- 2024-07-04ueditor 复制文章时,图片的链接是一个下载图片地址,该如何处理?-icode9专业技术文章分享
- 2024-07-04怎样判断host有没有对wordpress有缓存呢-icode9专业技术文章分享
- 2024-07-04具有编译功能的系统make后,无法ssh连接-icode9专业技术文章分享
- 2024-07-04make后如何升级ssh-icode9专业技术文章分享
- 2024-07-03微信支付提示下单账户与支付账户不一致-icode9专业技术文章分享