gpt4 book ai didi

ios - NSLayoutManager 可以安全地用在后台线程上吗?

转载 作者:可可西里 更新时间:2023-11-01 04:57:51 26 4
gpt4 key购买 nike

即使 iOS 文档说:

NLayoutManager, NSTextStorage, and NSTextContainer can be accessed from subthreads as long as the app guarantees the access from a single thread.

我偶尔遇到这个异常:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Only run on the main thread!'

这是回溯:

Exception Type:  SIGABRT
Exception Codes: #0 at 0x197bca58c
Crashed Thread: 7

Application Specific Information:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Only run on the main thread!'

Last Exception Backtrace:
0 CoreFoundation 0x000000018afd2f50 __exceptionPreprocess + 132
1 libobjc.A.dylib 0x00000001974dc1fc objc_exception_throw + 56
2 CoreFoundation 0x000000018afd2e10 +[NSException raise:format:arguments:] + 112
3 Foundation 0x000000018bb0ae20 -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 84
4 UIFoundation 0x00000001940f0654 -[NSLayoutManager(NSPrivate) _resizeTextViewForTextContainer:] + 412
5 UIFoundation 0x00000001940f0318 -[NSLayoutManager(NSPrivate) _recalculateUsageForTextContainerAtIndex:] + 1748
6 UIFoundation 0x000000019411ec2c _enableTextViewResizing + 236
7 UIFoundation 0x0000000194123e18 -[NSLayoutManager textContainerForGlyphAtIndex:effectiveRange:] + 484
8 UIFoundation 0x0000000194125c60 -[NSLayoutManager glyphRangeForTextContainer:] + 352

需要注意的一件事是我的 NLayoutManager 附加到 UITextView。您可以将其视为用于在后台线程中进行文本布局的普通 UITextView

那么这是否意味着与文档所说的相矛盾,如果 NLayoutManager 附加到 UITextView 就不能安全地用在单个后台线程上?

最佳答案

在我看来,文档中的注释实际上解释了问题。由于您正在使用附加到 UITextView 的布局管理器,您不能保证它是从单个线程访问的。最好假设 TextView 可以随时访问布局管理器,尤其是当 View 在屏幕上时。您无法确切知道它是如何使用布局管理器的,但可以肯定的是,它发生在主线程上。

您可以让您的后台线程创建一个单独的 NSLayoutManagerNSTextStorageNSTextContainer,进行所有布局计算,然后应用它们在主线程上计算。

关于ios - NSLayoutManager 可以安全地用在后台线程上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23401325/

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