Xcode16 编译运行YYCache iOS18 sqlite3_finalize 闪退问题解决方案
问题原因
升级Xcode 16 之后,真机运行APP,发现会有Crash,崩溃堆栈线上Crash 在 YYCache 之中。如下图所示


崩溃堆栈如下:
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRTframe #0: 0x00000001d93911d4 libsystem_kernel.dylib`__pthread_kill + 8frame #1: 0x00000002114d6ef8 libsystem_pthread.dylib`pthread_kill + 268frame #2: 0x0000000190d83ad8 libsystem_c.dylib`abort + 128frame #3: 0x0000000190d82e08 libsystem_c.dylib`__assert_rtn + 284frame #4: 0x000000010500f7d8 libRPAC.dylib`isBulkReadStatement.cold.3 + 100frame #5: 0x0000000104f80c88 libRPAC.dylib`isBulkReadStatement + 360frame #6: 0x0000000105005254 libRPAC.dylib`interposed_sqlite3_finalize + 152* frame #7: 0x0000000111d7adc0 CsdnPlus.debug.dylib`-[YYKVStorage _dbClose](self=0x000000013448ccc0, _cmd="_dbClose") at YYKVStorage.m:138:21frame #8: 0x0000000111d7ee84 CsdnPlus.debug.dylib`-[YYKVStorage dealloc](self=0x000000013448ccc0, _cmd="dealloc") at YYKVStorage.m:731:5frame #9: 0x0000000111d77d8c CsdnPlus.debug.dylib`-[YYDiskCache _appWillBeTerminated](self=0x0000000134f91200, _cmd="_appWillBeTerminated") at YYDiskCache.m:155:9frame #10: 0x0000000188fc32f4 CoreFoundation`__CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 148frame #11: 0x0000000188fc3210 CoreFoundation`___CFXRegistrationPost_block_invoke + 88frame #12: 0x0000000188fc3158 CoreFoundation`_CFXRegistrationPost + 436frame #13: 0x0000000188fc170c CoreFoundation`_CFXNotificationPost + 728frame #14: 0x0000000187be4ea4 Foundation`-[NSNotificationCenter postNotificationName:object:userInfo:] + 92frame #15: 0x000000018c897df0 UIKitCore`-[UIApplication _terminateWithStatus:] + 232frame #16: 0x000000018b8d6f88 UIKitCore`-[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:] + 112frame #17: 0x000000018c0b78f4 UIKitCore`-[_UISceneLifecycleMultiplexer forceExitWithTransitionContext:scene:] + 164frame #18: 0x000000018c89354c UIKitCore`-[UIApplication workspaceShouldExit:withTransitionContext:] + 164frame #19: 0x00000001a25d1f68 FrontBoardServices`__63-[FBSWorkspaceScenesClient willTerminateWithTransitionContext:]_block_invoke_2 + 72frame #20: 0x00000001a2591c44 FrontBoardServices`-[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] + 168frame #21: 0x00000001a25d1f08 FrontBoardServices`__63-[FBSWorkspaceScenesClient willTerminateWithTransitionContext:]_block_invoke + 128frame #22: 0x000000010563a71c libdispatch.dylib`_dispatch_client_callout + 20frame #23: 0x000000010563e13c libdispatch.dylib`_dispatch_block_invoke_direct + 296frame #24: 0x00000001a2593300 FrontBoardServices`__FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 52frame #25: 0x00000001a2593280 FrontBoardServices`-[FBSMainRunLoopSerialQueue _targetQueue_performNextIfPossible] + 240frame #26: 0x00000001a2593158 FrontBoardServices`-[FBSMainRunLoopSerialQueue _performNextFromRunLoopSource] + 28frame #27: 0x0000000188fc8328 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28frame #28: 0x0000000188fc82bc CoreFoundation`__CFRunLoopDoSource0 + 176frame #29: 0x0000000188fc5dc0 CoreFoundation`__CFRunLoopDoSources0 + 244frame #30: 0x0000000188fc4fbc CoreFoundation`__CFRunLoopRun + 840frame #31: 0x0000000188fc4830 CoreFoundation`CFRunLoopRunSpecific + 588frame #32: 0x00000001d4fa41c4 GraphicsServices`GSEventRunModal + 164frame #33: 0x000000018bb2aeb0 UIKitCore`-[UIApplication _run] + 816frame #34: 0x000000018bbd95b4 UIKitCore`UIApplicationMain + 340frame #35: 0x000000010fae959c CsdnPlus.debug.dylib`main(argc=3, argv=0x000000016b2e7438) at main.m:14:16frame #36: 0x00000001ae9b2ec8 dyld`start + 2724
解决方案一
@implementation YYKVStorage- (BOOL)_dbClose {...// 原代码if (_dbStmtCache) CFRelease(_dbStmtCache);// 替换为if (_dbStmtCache) { CFIndex size = CFDictionaryGetCount(_dbStmtCache);CFTypeRef *valuesRef = (CFTypeRef *)malloc(size * sizeof(CFTypeRef));CFDictionaryGetKeysAndValues(_dbStmtCache, NULL, (const void **)valuesRef);const sqlite3_stmt **stmts = (const sqlite3_stmt **)valuesRef;for (CFIndex i = 0; i < size; i ++) {sqlite3_stmt *stmt = stmts[i];sqlite3_finalize(stmt);}free(valuesRef);CFRelease(_dbStmtCache);}...
}
解决方案二
static void _finalizeStatement(const void *key, const void *value, void *context) {sqlite3_finalize((sqlite3_stmt *)value);
}- (BOOL)_dbClose {···// 原代码if (_dbStmtCache) CFRelease(_dbStmtCache);// 替换为if (_dbStmtCache) { CFDictionaryApplyFunction(_dbStmtCache, _finalizeStatement, NULL);CFRelease(_dbStmtCache);}···
}
相关文章:
Xcode16 编译运行YYCache iOS18 sqlite3_finalize 闪退问题解决方案
问题原因 升级Xcode 16 之后,真机运行APP,发现会有Crash,崩溃堆栈线上Crash 在 YYCache 之中。如下图所示 崩溃堆栈如下: * thread #1, queue com.apple.main-thread, stop reason signal SIGABRTframe #0: 0x00000001d9391…...
Kafka-Windows搭建全流程(环境,安装包,编译,消费案例,远程连接,服务自启,可视化工具)
目录 一. Kafka安装包获取 1. 官网地址 2. 百度网盘链接 二. 环境要求 1. Java 运行环境 (1) 对 java 环境变量进行配置 (2) 下载完毕之后进行解压 三. 启动Zookeeper 四. 启动Kafka (1) 修改Conf下的server.properties文件,修改kafka的日志文件路径 (2)…...
django模板相关配置
模板引擎配置 Django支持多种模板引擎,最常用的是Django自带的模板引擎和Jinja2模板引擎。模板引擎的配置主要在settings.py文件中的TEMPLATES列表中进行。 BACKEND:指定模板引擎。例如,BACKEND: django.template.backends.django.DjangoTe…...
MongoDB等保限制下的连接认证问题
目录 一、问题描述 二、解决方案 三、代码示例 四、拓展知识 一、问题描述 用户调整用户连接认证机制以满足等保要求,调整后程序连接mongodb失败。数据库日志报错如下: {"t":{"$date":"2024-10-10T14:39:07.825+08:00"},"s":&q…...
2024 睿抗机器人开发者大赛(RAICOM)-【网络安全】CTF 部分WP
文章目录 一、前言二、MICS你是黑客么循环的压缩包Goodtime 三、WEBpy 四、Crypto变异凯撒RSAcrypto3 一、前言 WP不完整,仅供参考! 除WEB,RE,PWN外,其余附件均已打包完毕 也是一个对MISC比较友好的一个比赛~ 123网…...
idea 无法输入中文 快速解决
idea在某些情况会出现无法输入中文的情况,我们不去深究内部原因,直接上解决方案: 1、点击菜单help->Edit Custom VM Options 2、最后一行,追加: -Drecreate.x11.input.methodtrue 、 3、重启...
掌握ElasticSearch(五):查询和过滤器
一、查询和过滤器的区别 在 Elasticsearch 中,查询(Query)和过滤器(Filter)是用于检索和筛选数据的重要组成部分。它们虽然都能用来查找文档,但在性能和用法上有所不同。下面详细介绍查询和过滤器的概念以…...
自学[vue+SpringCloud]-012-SpringCloud工程发送邮件
文章目录 前言一、配置QQ邮箱1.1 设置1.2 获取授权码 二、服务发送邮件2.1 引入依赖包2.2 新建AlarmMessageDto2.3 增加controller代码2.4 main方法测试 总结 前言 skywalking监控通过webhook调用SpringCloud服务接口,接口中发送告警邮件。 一、配置QQ邮箱 1.1 设…...
STM32通信协议-I2C
目录 一,IC2的协议规则 I2C总线是PHILIPS公司开发的两线式串行总线,I2C总线主要解决了单片机一对多通信的问题 两根通信线:SCL,SDA,同步,半双工通信,支持数据应答机制,支持总线挂载多设备。 …...
廉颇老矣尚能饭否,实践甘肃数据挖掘挑战赛作物与杂草的智能识别,基于YOLOv3全系列【tiny/l/spp】参数模型开发构建田间低头作物杂草智能化检测识别模型
一、背景 田间杂草的有效管理是现代农业生产中面临的重要挑战之一。杂草不仅竞争作物的养分、 水分和阳光,还可能成为害虫和病原体的寄主,从而降低农作物的产量和品质。因此,开发 高效、精确的杂草检测和管理系统对于提高农业生产效率、降低化…...
基于Django+Python的宾馆管理系统设计与实现
项目运行 需要先安装Python的相关依赖:pymysql,Django3.2.8,pillow 使用pip install 安装 第一步:创建数据库 第二步:执行SQL语句,.sql文件,运行该文件中的SQL语句 第三步:修改源…...
MySQL--mysql的安装
1.Linux上mysql的安装: Ubuntu下: (1)安装前首先切换到管理员身份:sudo su (2)然后执行命令:apt install mysql-server (注意:装的是服务器端,客户端自动就安装了) (3)执行过程中按y; 2.Mysql初始化配置 注意,一定是sudo su,必须是管理员才能进行Mysql的初始化设置; 初始化…...
qt 构建、执行qmake、运行、重新构建、清除
qt右键功能有 构建、执行qmake、运行、重新构建、清除,下面简单介绍一下各个模块的作用。 1. 执行qmake qmake是一个工具, 它根据pro文件生成makefile文件,而makefile文件中则定义编译与连接的规则。pro文件中定义了头文件,源文件…...
微软发布 Win11 22H2/23H2 十月可选更新KB5044380!
系统之家于10月23日发出最新报道,微软针对Win11 22H2和23H2用户,发布了10月可选更新KB5044380,用户安装后版本号升至22621.4391和22631.4391。本次更新开始推出屏幕键盘的新游戏板键盘布局,支持用户使用Xbox控制器在屏幕上移动和键…...
TensorFlow面试整理-TensorFlow 基础概念
在学习和准备 TensorFlow 时,了解基础概念是至关重要的。以下是 TensorFlow 的一些核心基础概念: 1. Tensor (张量) ● 定义:张量是 TensorFlow 中的核心数据结构。它是一个多维数组,可以表示标量、向量、矩阵以及更高维的数组。张量在数学上与矩阵非常相似,但可以具有任意…...
Java实现HTTP代理的技巧与方法
在互联网时代,代理IP已经成为了网络访问中不可或缺的一部分。无论是为了保护隐私,还是为了访问特定的网络资源,代理IP都能发挥重要作用。那么,如何在Java中实现HTTP代理呢?本文将带您逐步了解这个过程。 什么是HTTP代…...
MFC图形函数学习02——绘制像素点函数
再次强调一下,我们这里学习的MFC图形函数,是指绘制二维图形的函数。一般来说,一个二维图形组成的基本要素是点、线、面以及相关的颜色。在本文中,将学习绘制像素点函数,与绘制像素点相关的其它基础知识也随着绘图函数学…...
Oracle CONNECT BY、PRIOR和START WITH关键字详解
Oracle CONNECT BY、PRIOR和START WITH关键字详解 1. 基本概念2. 数据示例3. SQL示例3.1. 查询所有员工及其上级3.2. 显示层次结构3.3. 查询特定员工的子级 4. 结论 在Oracle数据库中,CONNECT BY、PRIOR和START WITH关键字主要用于处理层次结构数据,例如…...
gateway 整合 spring security oauth2
微服务分布式认证授权方案 在分布式授权系统中,授权服务要独立成一个模块做统一授权,无论客户端是浏览器,app或者第三方,都会在授权服务中获取权限,并通过网关访问资源 OAuth2的四种授权模式 授权码模式 授权服务器将授…...
Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)
前言:最近重拾Unity,准备做个3D的FPS小游戏,这里以官方FPS案例素材作为切入。 导入素材和素材理解 安装Unity新建项目新建文件夹和Scene如何去理解三维模型素材找到模型素材素材预制体结构骨骼和网格材质(Material)、…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...
