YYText
YYText copied to clipboard
YYTextLayout crash
使用YYTextLayout计算layout的时候发生crash,但是这个数据是通过上报获得的,实际开发中没有遇到过这个crash,所以像请问下这个可能是什么原因导致的?
下面是crashlog: Crashed: com.apple.main-thread 0 libsystem_platform.dylib 0x182d7d7ec OSAtomicDecrement32Barrier 1 CoreText 0x18577cb78 TReferenced::Adopt(MReferenceCounted const_) + 36 2 CoreText 0x18577cb30 TDescriptor::~TDescriptor() + 56 3 CoreFoundation 0x182ff8c34 CFRelease + 256 4 CoreText 0x18579c270 TFont::~TFont() + 160 5 CoreFoundation 0x182ff8c34 CFRelease + 256 6 CoreText 0x1857c45c8 std::__1::__vector_base<TCFRef<_CFData const>, TInlineBufferAllocator<TCFRef<__CFData const*>, 30ul> >::~__vector_base() + 64 7 CoreText 0x18578e574 TFontCascade::~TFontCascade() + 152 8 CoreText 0x18578b3b8 TGlyphEncoder::EncodeChars(CFRange, TAttributes const&, TGlyphList<TDeletedGlyphIndex>&, TGlyphEncoder::Fallbacks) + 1268 9 CoreText 0x18578aa9c TTypesetterAttrString::Initialize(_CFAttributedString const) + 248 10 CoreText 0x18578a8bc TTypesetterAttrString::TTypesetterAttrString(_CFAttributedString const) + 128 11 CoreText 0x1857ccdd0 CTFramesetterCreateWithAttributedString + 80 12 YoukuiPhone 0x100b27b24 +YYTextLayout layoutWithContainer:text:range: 13 YoukuiPhone 0x100b273f4 +YYTextLayout layoutWithContainer:text:
我只能找到与之类似的一个问题:https://github.com/facebook/react-native/issues/2001 看样子有可能与 ARC 下内存释放的竞态条件有关,也可能与 CoreText 内部逻辑有关。。
能问下这个崩溃频率和次数、系统版本吗?方便的话提供下相关使用代码、YYText 版本吧。
频率大概是1%不到 发生的系统版本ios9、8、7都有,ios9大约72% ios8大约26%,yytext版本应该是1.0.0左右,因为不是通过pod导入的 所以具体版本号追溯不到了,具体调用的代码发送到你的gmail邮箱中了,你可以看下
如果相关代码都是在主线程执行的,那看不出有什么问题。。看 rn 那个描述,可能与多线程情况或字体加载有关。
另外,推荐更新一下代码看看吧,1.0 之后都修改了一些 bug,没有其他变动:https://github.com/ibireme/YYText/releases
从崩溃信息来看 应该就是在主线程执行的
那这个问题很难定位了。。这是 CoreText 内部的崩溃,但传入参数也没问题,也是在主线程调用的不可能有线程安全问题。。
但我还是怀疑与多线程的什么东西有关,比如 Font 的调用、异步绘制、其他逻辑中的后台线程操作等等。。。
我现在更新了yytext到最新版本 调整了调用layout的时机 看下下个版本会不会有所好转
这个是字体引起的 定义一个指针xx
UIFont *font = [UIFont systemFontOfSize:17];
CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef)font.fontName, font.pointSize, NULL);
self.xx = (__bridge id)ctFont;
CFRelease(ctBoldFont);
用这种转换后了font 可以完美解决
我也遇到了这个问题,是因为字符串里面含有特殊符号“ԅ(¯ㅂ¯ԅ) ”,用户输入的这个东西,要怎么解决呢
我也遇到了,崩溃轨迹类似,有什么解决方案吗,我是在异步线程里面计算YYTextLayout的 下面是第三方捕捉到的crashlog: 1CoreText0x182ca65e4TBMPDataCache::GetDataForCharacter(unsigned short) const + 72 2CoreText0x182ca65b4TBMPDataCache::GetDataForCharacter(unsigned short) const + 24 3CoreText0x182ca61f8TUnicodeEncoder::Encode(__CTFont const*, TCharStreamIterator&, CFRange, bool, unsigned short*, CGSize*, unsigned int*, double&) + 604 4CoreText0x182cdd100TGlyphEncoder::RunUnicodeEncoderRecursively(unsigned int, TCFRef<CTRun*>&&, __CTFont const*, CFRange, TGlyphList<TDeletedGlyphIndex>&, TGlyphList<TDeletedGlyphIndex>&, TFontCascade const*, TGlyphEncoder::ClusterMatching, bool) + 1404 5CoreText0x182cdd838TGlyphEncoder::AppendUnmappedCharRun(unsigned int, TCFRef<CTRun*>&, __CTFont const*, CFRange, CFRange, TGlyphList<TDeletedGlyphIndex>&, TGlyphList<TDeletedGlyphIndex>&, TFontCascade const&, TGlyphEncoder::ClusterMatching) + 1420 6CoreText0x182cdcfdcTGlyphEncoder::RunUnicodeEncoderRecursively(unsigned int, TCFRef<CTRun*>&&, __CTFont const*, CFRange, TGlyphList<TDeletedGlyphIndex>&, TGlyphList<TDeletedGlyphIndex>&, TFontCascade const*, TGlyphEncoder::ClusterMatching, bool) + 1112 7CoreText0x182ca5d80TGlyphEncoder::RunUnicodeEncoder(TCFRef<CTRun*>&&, __CTFont const*, CFRange, TGlyphList<TDeletedGlyphIndex>&, TFontCascade const*) + 132 8CoreText0x182ca3570TGlyphEncoder::EncodeChars(CFRange, TAttributes const&, TGlyphList<TDeletedGlyphIndex>&, TGlyphEncoder::Fallbacks) + 1248 9CoreText0x182ca2c68TTypesetterAttrString::Initialize(__CFAttributedString const*) + 248 10CoreText0x182ca2a88TTypesetterAttrString::TTypesetterAttrString(__CFAttributedString const*) + 128 11CoreText0x182ce6528_CTFramesetterCreateWithAttributedString + 80 12 ProjectName 0x1001302b8+[YYTextLayout layoutWithContainer:text:range:] (YYTextLayout.m:490) 13 ProjectName 0x10012fbf0+[YYTextLayout layoutWithContainer:text:] (YYTextLayout.m:363)
同样遇到 子线程调用 频繁的话必崩 0 _os_unfair_lock_corruption_abort 1 _os_unfair_lock_lock_slow 2 -[NSRLEArray initWithRefCountedRunArray:] 3-[CFAttributedString initWithAttributedStr..] 4 CGAttributedStringCreateCopy 5TcharStreamCGAttrSTring:TCharStreamCFAttrString 6TTypesetterAttrString:TTypesetterAttrString(_CFA.. 7CTFrameSetterCreateWithAttributedString 8 [YYtextLayout layoutWithContainer:text:range]
我也遇到了,线程栈调用 Thread 0 Crashed: 0 CoreFoundation 0x000000018101bfa4 _CFBasicHashFindBucket :2152 (in CoreFoundation) 1 CoreFoundation 0x000000018101b720 _CFDictionaryGetValue :224 (in CoreFoundation) 2 CoreText 0x0000000184978e48 TSplicedFontDict::ComponentHasVariations() const :28 (in CoreText) 3 CoreText 0x00000001849c7440 TSplicedFont::CopyVariationAxes() const :28 (in CoreText) 4 CoreText 0x0000000184959254 TFont::CopyOpticalSizeAxis() const :64 (in CoreText) 5 CoreText 0x0000000184959e38 TFont::SetOpticalSize() :196 (in CoreText) 6 CoreText 0x00000001849557ac TFont::FinishConstruction() :20 (in CoreText) 7 CoreText 0x0000000184955a20 TFont::TFont(__CTFontDescriptor const*, double, CGAffineTransform const*, unsigned int, __CTFontDescriptor const*) :284 (in CoreText) 8 CoreText 0x000000018495aa8c TFontCascade::CreateFallbackFromDescriptor(__CTFontDescriptor const*) const :124 (in CoreText) 9 CoreText 0x00000001849202e8 TFontCascade::InitCascadeFallbackAtIndex(long) :388 (in CoreText) 10 CoreText 0x000000018491f4cc TFontCascade::CreateFallback(__CTFont const*, __CFString const*, CTEmojiPolicy) const :652 (in CoreText) 11 CoreText 0x000000018493a2ac TGlyphEncoder::AppendUnmappedCharRun(unsigned int, TCFRef&, __CTFont const*, CFRange&, CFRange, TGlyphList&, TGlyphList&, TFontCascade const&, TGlyphEncoder::ClusterMatching, bool) :660 (in CoreText) 12 CoreText 0x0000000184939e20 _ZN13TGlyphEncoder28RunUnicodeEncoderRecursivelyEjO6TCFRefIP5CTRunEPK8__CTFont7CFRangeR10TGlyphListI18TDeletedGlyphIndexESC_PK12TFontCascadeNS_15ClusterMatchingEb :1876 (in CoreText) 13 CoreText 0x000000018493a624 TGlyphEncoder::AppendUnmappedCharRun(unsigned int, TCFRef&, __CTFont const*, CFRange&, CFRange, TGlyphList&, TGlyphList&, TFontCascade const&, TGlyphEncoder::ClusterMatching, bool) :1548 (in CoreText) 14 CoreText 0x0000000184939e20 _ZN13TGlyphEncoder28RunUnicodeEncoderRecursivelyEjO6TCFRefIP5CTRunEPK8__CTFont7CFRangeR10TGlyphListI18TDeletedGlyphIndexESC_PK12TFontCascadeNS_15ClusterMatchingEb :1876 (in CoreText) 15 CoreText 0x000000018490866c _ZN13TGlyphEncoder17RunUnicodeEncoderEO6TCFRefIP5CTRunEPK8__CTFont7CFRangeR10TGlyphListI18TDeletedGlyphIndexEPK12TFontCascade :128 (in CoreText) 16 CoreText 0x0000000184939348 TGlyphEncoder::EncodeChars(CFRange, TAttributes const&, TGlyphEncoder::Fallbacks) :1400 (in CoreText) 17 CoreText 0x000000018490646c TTypesetterAttrString::Initialize(__CFAttributedString const*) :240 (in CoreText) 18 CoreText 0x0000000184906250 TTypesetterAttrString::TTypesetterAttrString(__CFAttributedString const*) :112 (in CoreText) 19 CoreText 0x000000018494455c _CTFramesetterCreateWithAttributedString :76 (in CoreText) 20 AFWealth 0x00000001031fc014 +[SNSTextLayout layoutWithContainer:text:range:] SNSTextLayout.m:324 (in AFWealth)
遇到类似的问题, 也是 CTFramesetterCreateWithAttributedString crash , 问题是特殊字符 "user_name":"雪雪 ,"