uni-app nvue地图在ios上调用removeMarkers方法时,若markerIds数量超过471个会导致app闪退,安卓则无此问题

uni-app nvue地图在ios上调用removeMarkers方法时,若markerIds数量超过471个会导致app闪退,安卓则无此问题

nvue地图在ios上调用removeMarkers方法,当markerIds的数量超过471个后app闪退,安卓没问题

开发环境 版本号 项目创建方式
iOS
12 回复

那就控制数量,哈哈

更多关于uni-app nvue地图在ios上调用removeMarkers方法时,若markerIds数量超过471个会导致app闪退,安卓则无此问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


你好,能提供一下示例工程吗?

你好,暂时不能提供,后来研究了下发现,只要removeMarkers的markerIds数量为全部的markers数量就会闪退,删除时markerIds的markerIds.length - 1就不会闪退。意思就是只要不全部删除完坐标点,留一个就不会闪退,全部坐标点删除的话就会闪退。

只在IOS上有这个问题,安卓没问题

可以提供一个dmeo工程,能复现问题就好,不需要你们的工程

回复 DCloud_iOS_XHY: 我放百度网盘了,麻烦你下一下吧 链接: https://pan.baidu.com/s/1RGYSHEyBQQ6q5dzrr6qh-w?pwd=eq40 提取码: eq40

闪退复现条件:

回复 White007: 感谢反馈,问题已确认,下个版本会修复此问题

HX 3.4.9+ 版本已修复此问题

感谢反馈问题已确认,下个版本会修复此问题
另外需要注意一下 marker 的锚点问题,以示例demo中的 icon 为例,因为图片下面是留白一半的,这样就需要设置
anchor: {
x: 0.5,
y: 0.5
}, 这样缩放的时候就很自然了

好的,感谢!

在使用 uni-appnvue 地图组件时,如果在 iOS 平台上调用 removeMarkers 方法时,markerIds 的数量超过 471 个会导致应用闪退,而在 Android 平台上则没有这个问题。这可能是由于 iOS 平台在处理大量数据时存在内存或性能限制,导致应用崩溃。

解决方案

  1. 分批删除 Markers: 将 markerIds 分成多个小批次进行删除,而不是一次性删除所有 markerIds。这样可以避免一次性处理过多数据导致的内存问题。

    function removeMarkersInBatches(markerIds, batchSize = 100) {
        let index = 0;
        function removeNextBatch() {
            const batch = markerIds.slice(index, index + batchSize);
            if (batch.length > 0) {
                map.removeMarkers(batch);
                index += batchSize;
                setTimeout(removeNextBatch, 0); // 使用 setTimeout 避免阻塞主线程
            }
        }
        removeNextBatch();
    }
    
    // 使用示例
    const markerIds = [...]; // 你的 markerIds 数组
    removeMarkersInBatches(markerIds, 100);
回到顶部