В среднем у меня есть NSMutableOrderedSet, где новый пользовательский объект добавляется каждую секунду. Каждый раз, когда поступают новые данные, ссылка на lastObject обновляется. Также в конце метода, если счетчик NSMutableOrderedSet больше 300, первый объект удаляется из NSMutableOrderedSet. Все сделано в @ synchronized блоке.
. В iOS13 мы получаем исключение NSRangeException cra sh в 50.000 сеансов. Cra sh Журналы:
Fatal Exception: NSRangeException
*** -[__NSArrayM objectAtIndex:]: index 300 beyond bounds [0 .. 299]
0 CoreFoundation __exceptionPreprocess
1 libobjc.A.dylib objc_exception_throw
2 CoreFoundation -[__NSCFString characterAtIndex:].cold.1
3 CoreFoundation _CFDataInit
4 xxxxxx -[xxx lastObject:]
С уменьшением временного интервала добавления данных мне удалось создать cra sh в тестовой среде. Cra sh происходит именно в этой строке
MY-NSMutableOrderedSet lastObject
Как такое Cra * sh может произойти в простом iOS методе, который возвращает последний объект в массиве.