多线程崩溃中的sizeWithFont!
-
30-09-2019 - |
题
sizewithfont在多线程中崩溃,这是调试信息:
1 0x00a0df8e in icu::RuleBasedBreakIterator::handleNext
2 0x00a0daff in icu::RuleBasedBreakIterator::next
3 0x00a0d174 in icu::RuleBasedBreakIterator::following
4 0x35879719 in WebCore::nextBreakablePosition
5 0x3587842a in -[NSString(WebStringDrawing) _web_drawInRect:withFont:ellipsis:alignment:lineSpacing:includeEmoji:measureOnly:]
6 0x35877da3 in -[NSString(WebStringDrawing) _web_sizeInRect:withFont:ellipsis:lineSpacing:]
7 0x3090d238 in -[NSString(UIStringDrawing) sizeWithFont:constrainedToSize:lineBreakMode:lineSpacing:]
8 0x3090cee3 in -[NSString(UIStringDrawing) sizeWithFont:constrainedToSize:lineBreakMode:]
现在,我通过使用nslock对象解决了错误,在使用此功能之前,我将锁定此对象,然后将其解锁
但是我认为必须有一个更好的解决方案!
我发现仅当两个线程在两个线程上的NSString对象都是多线文本时才出现此错误
其他提示
请格式化。
通过在对象周围放置随机锁来“解决”多线程问题,绝不是正确的答案。永远不会。多线程需要您的应用程序系统设计。
如果锁确实“解决”了问题,则显示您锁定的内容以及如何评估情况至关重要。
更多症状将有所帮助。尤其是代码。您的问题中的代码非常有用。
鉴于缺乏证据,我敢打赌,您在试图抓住另一个线程的同时在一个线程上突变一根弦。否则该对象仍在一个线程上释放,同时仍然使用另一个线程。或者,您正在从辅助线程中操纵一个不安全的对象。
我认为permorySelectorOnMainThread:withObject:waituntildone:正确,
以前,我使用操作计算文本大小,并使用主线程中的Waituntilallallallallaseration ArareArareArareArareFiin the Mainther for Operation返回,
但是,如果我还使用permareSlectorOnmainthread:whiteObject:waituntildone在操作中,并将waituntildone参数设置为YES(因为我需要结果)
主线程将被卡住
因此,现在我删除了waituntilallallallallaterationarefined,并使用异步对象确保操作直到上一个停止之前才能启动
[md removeAllObjects];
[md setObject:subString forKey:@"text"];
[md setObject:[NSNumber numberWithInt:view_w ] forKey:@"width"];
[md setObject:[NSNumber numberWithInt:height_left + font_h ] forKey:@"height"];
[self performSelectorOnMainThread:
@selector(calculateTextRegion:)
withObject:md
waitUntilDone:YES];
CGSize stringSize = textRegion;
不隶属于 StackOverflow