Creator2.2.2在Ipad4上闪退(必现)有Demo

  • Creator 版本:2.2.2

  • 目标平台: IOS

  • 详细报错信息,包含调用堆栈:见下图

  • 重现方式:运行demo即可

  • 之前哪个版本是正常的 :2.0.10

  • 手机型号 :Ipad4

  • 出现概率:100%

  • 额外线索: 从2.0.10升级过来的 不过发现ipad4不是64位 还是用jsc 目前用v8的没问题 jsc的应该都有问题

SpineHttpCrash.zip (246.3 KB)

demo已上传 代码也很简单 就是先释放prefab(prefab内用用到spine) 然后发起http请求 在回掉里面调用cc.sys.garbageCollect()释放内存 就会闪退

@jare @huanxinyin 呼叫大佬 看下 在线等

自己顶一下

先确认下 IOS 系统版本多少?低于10.0的版本,JSC也是有兼容性问题的

@huanxinyin 抱歉 刚才去开会了 系统是10.3.3 不会有系统问题的

在升级之前的版本是2.0.10 也是jsc 没有任何问题

@huanxinyin 大佬 怎么样 我的问题 有复现么

自己顶一下

我们这边没有32位的IOS设备可以复现问题,你可否试试2.3.2版本,看看问题是否解决?

@huanxinyin 测试过最新的2.3.3-rc.3 存在此问题 设备的话应该是ipad4 iphone5 iphone5c 应该都可以复现 这3个应该都是A6的处理器 (我这里只测了ipad4)

持续关注

自己顶一下

@huanxinyin 大佬 今天测了下2.2.2版本修改config跑jsc 在ipad air 3上也没问题 所以只能通过32位的复现了

如果实在找不到32位的机器 也可以远程我的机器 随时都可以配合

临时解决方案来了~~~

经追查、对比2.0.10和2.2.2文件发现 在SkeletonDataMgr.cpp脚本的releaseByUUID方法多了_destroyCallback这个处理 实验发现就是这部分代码导致的32位崩溃 所以临时的处理方法是在32位的机器上暂时不添加这段代码 跑了2个小时未发现有别的问题(因为水平有限 没有看懂这部分代码具体是在干啥)

下面贴下代码

void SkeletonDataMgr::releaseByUUID (const std::string& uuid) {
    auto dataIt = _dataMap.find(uuid);
    if (dataIt == _dataMap.end()) {
        return;
    }
    SkeletonDataInfo* info = dataIt->second;
    // If info reference count is 1, then info will be destroy.
    if (info->getReferenceCount() == 1) {
        _dataMap.erase(dataIt);
        #if TARGET_OS_IOS
            #ifdef __arm64__
                if (_destroyCallback) {
                    auto& texturesIndex = info->texturesIndex;
                    for (auto it = texturesIndex.begin(); it != texturesIndex.end(); it++) {
                        _destroyCallback(*it);
                    }
                }
            #endif
        #endif
    }
    info->release();
}

我也有遇到jsc崩溃的问题,请问64位机器上会闪退吗也?

如果是2.2.2的话 64位会使用v8的 测试跑了几天 暂时没发现有这方面的闪退