Workaround crash during layout on macOS when a large number of flex (#69)
layouts are being performed, such as during a window resize.
This commit is contained in:
Родитель
7b572245f3
Коммит
8a1b084482
|
@ -115,6 +115,20 @@
|
|||
contentFrame:(CGRect)contentFrame
|
||||
descendantViews:(NSArray<UIView *> *)descendantViews
|
||||
{
|
||||
#if TARGET_OS_OSX // [TODO(macOS ISS#2323203)
|
||||
// On macOS when a large number of flex layouts are being performed, such
|
||||
// as when a window is being resized, AppKit can throw an uncaught exception
|
||||
// (-[NSConcretePointerArray pointerAtIndex:]: attempt to access pointer at index ...)
|
||||
// during the dealloc of NSLayoutManager. The _textStorage and its
|
||||
// associated NSLayoutManager dealloc later in an autorelease pool.
|
||||
// Manually removing the layout manager from _textStorage prior to release
|
||||
// works around this issue in AppKit.
|
||||
NSArray<NSLayoutManager *> *managers = [_textStorage layoutManagers];
|
||||
for (NSLayoutManager *manager in managers) {
|
||||
[_textStorage removeLayoutManager:manager];
|
||||
}
|
||||
#endif // ]TODO(macOS ISS#2323203)
|
||||
|
||||
_textStorage = textStorage;
|
||||
_contentFrame = contentFrame;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче