В среднем у меня есть NSMutableOrderedSet, где каждую секунду добавляется новый пользовательский объект. Каждый раз, когда поступают новые данные, ссылка на lastObject обновляется. Также в конце метода, если количество NSMutableOrderedSet больше 300, первый объект удаляется из NSMutableOrderedSet. Все делается в блоке @synchronized.
В iOS13 мы получаем сбой NSRangeException через 50 000 сеансов. Журналы сбоев:
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:]
С уменьшением временного интервала добавления данных мне удалось создать краш в тестовой среде. Сбой происходит именно в этой строке
MY-NSMutableOrderedSet lastObject
Как такой сбой может произойти в простом методе iOS, который возвращает последний объект в массиве.