[LayaAirIDE3]layanative3.1 ios 使用TTF crash

年前我提交了一个ios native crash的反馈
LayaNative ios使用TTF字体启动奔溃 - layabox问答社区-HTML5引擎社区-LayaAir开发者社区
但是这种情况无法提供demo,因此我这边尝试使用简单模型进行crash复现
(本demo出现的bug堆栈,与我另外一个问题内发布的堆栈是不同的,不排除是二个不同的crash点,看本次crash为找不到字符,另外一次crash是字体遍历?)
 
附件demo核心逻辑是每秒生产2000个随机字符赋值给Label,在ios的native环境下运行demo就会奔溃。
 
版本:3.1.0
已邀请:

lv

赞同来自: Recovery

已解决,3.1.2版本会发出修复版本

lv

赞同来自:

收到

layabox

赞同来自:

该问题属于使用问题,官网文档中对于文本的使用,有说明,
文档链接为:https://layaair.com/3.x/doc/2D/advanced/useText/readme.html

关键内容为:


LayaAir引擎在文本的底层渲染上,有两种方式。
分别是Text文本类的文本统一提交方式,和Graphics类的fillText文本单字符绘制提交方式。
如果采用了Text文本,那每一个Text文本对象中的文本字符会一起形成小图集提交到大图合集中,比如游戏中某个文本对象有300字,其中一个字符发生改变,也会对该文本对象的300字整段文本图集重新提到大图合集中。
又假如,在一个剧情游戏中,两人在对话。那其中一个文本对象,要不断的重新取值和赋值操作,使得该文本对象的显示内容频繁发生改变。此时,Text文本对象,就会不断的向大图合集进行文本图集的提交,占满大图集后,又需要创建一个新的图集继续提交,而不用的旧图集,如果没达到GC条件,也会一直存在,所以如果此次查看内存占用统计信息,就可以看到会一直在涨内存,直到GC条件达到之后,才会被销毁。并且GC在清空垃圾内存的时候,还有可能会导致瞬间的卡顿,甚至崩溃。
而采用Graphics类的fillText文本绘制,则是按单个字符向大图合集中进行提交,并且大图合集中已经存在的字符不会重复提交。所以对于图集的利用率比较好,即便是发生文本改变的时候,也不会向Text文本那样,创建很多垃圾图集。



结论:您在demo中,通过不断的修改label,就是文档中说的text的错误使用方式,这种用法是我们不建议的,建议您先改掉这种用法,再看看是不是还存在问题,如果仍然存在,请更新demo。我们再看看有没有别的问题。

Recovery

赞同来自:

附加一个文本乱码BUG
 
附件demo核心逻辑是每5秒生产100个随机0-255的字符赋值给Label,在ios的native环境下运行demo稍等,出现乱码现象。

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作