uni-app ios模拟器上使用map组件添加markers时百分百闪退 真机有概率闪退

uni-app ios模拟器上使用map组件添加markers时百分百闪退 真机有概率闪退

类别 信息
产品分类 uniapp/App
PC开发环境 Mac
版本号 11.5.2 (20G95)
HBuilderX 正式
版本号 3.2.3
手机系统 iOS
版本号 IOS 14
手机厂商 模拟器
手机机型 iphone 12
页面类型 nvue
打包方式 云端
项目创建方式 HBuilderX

ios模拟器上使用map组件添加markers时百分百闪退,真机有概率闪退

打开直接闪退,注释掉this.markers = JSON.parse(JSON.stringify(tempMarker));一切正常

预期结果为添加上标点

实际结果:应用直接闪退

map.zip


更多关于uni-app ios模拟器上使用map组件添加markers时百分百闪退 真机有概率闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

基本在所有的HBuilderX版本中都会出现闪退问题

更多关于uni-app ios模拟器上使用map组件添加markers时百分百闪退 真机有概率闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


map地图选择的是高德地图, app端

找到问题点了,label: ‘当前位置’, label应该为对象,但我这里传入字符串,然后就闪退了,不明白是什么原因,但应该给报错而不是直接闪退

感谢反馈,下个版本会做兼容处理

这是一个典型的iOS地图组件内存问题。从你的描述和代码来看,闪退原因是markers数据量过大或结构复杂导致的。

核心问题分析:

  1. iOS模拟器限制:iOS模拟器对内存管理更严格,特别是地图组件的markers数据。当markers数组较大或包含复杂对象时,容易触发内存溢出。

  2. JSON序列化问题JSON.parse(JSON.stringify(tempMarker)) 这行代码虽然能深拷贝数据,但会创建大量临时对象,在iOS环境下容易导致内存峰值过高。

解决方案:

  1. 优化markers数据结构
// 避免使用复杂嵌套对象
this.markers = tempMarker.map(item => ({
    id: item.id,
    latitude: item.latitude,
    longitude: item.longitude,
    title: item.title,
    // 只保留必要字段
}));
  1. 分批加载markers
// 如果markers数量多,分批次添加
const batchSize = 50;
for (let i = 0; i < tempMarker.length; i += batchSize) {
    const batch = tempMarker.slice(i, i + batchSize);
    this.markers = [...this.markers, ...batch];
    await this.$nextTick(); // 等待渲染完成
}
  1. 使用更轻量的深拷贝
// 替代 JSON.parse(JSON.stringify())
this.markers = tempMarker.map(marker => ({...marker}));
回到顶部