gpt4 book ai didi

objective-c - 多线程崩溃中的 sizeWithFont!

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:11 25 4
gpt4 key购买 nike

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对象都是多行文本时才会出现这个错误

最佳答案

通常,您不应从单独的线程中调用 UIKit 方法 [1]。是否要锁并不重要,这是不可能的。

当您使用多线程应用程序时,您需要确保接触任何 UIKit 对象的任何代码都在主线程上执行。这是通过使用 performSelectorOnMainThread:withObject:waitUntilDone: 方法实现的,该方法在主线程上调用给定的选择器:

http://developer.apple.com/iphone/library/documentation/cocoa/reference/foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/performSelectorOnMainThread:withObject:waitUntilDone :

或者在 MonoTouch 中:foo.InvokeOnMainThread (delegate { your_code_here });

[1] 在 iOS 4.0 中,一些 API 的规则放宽了。

关于objective-c - 多线程崩溃中的 sizeWithFont!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3527877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com