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:
Tom Underhill 2019-05-15 14:37:12 -07:00 коммит произвёл GitHub
Родитель 7b572245f3
Коммит 8a1b084482
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 14 добавлений и 0 удалений

Просмотреть файл

@ -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;