【发布时间】:2025-12-03 05:40:02
【问题描述】:
平均而言,我有一个 NSMutableOrderedSet,其中每秒添加一个新的自定义对象。每次有新数据到达时,都会更新对 lastObject 的引用。同样在方法结束时,如果 NSMutableOrderedSet 计数大于 300,则从 NSMutableOrderedSet 中删除第一个对象。全部在 @synchronized 块中完成。
在 iOS13 中,我们在 50.000 个会话中遇到 NSRangeException 崩溃。 崩溃日志:
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 方法中怎么会发生这种崩溃。
【问题讨论】:
标签: ios objective-c xcode nsset nsrangeexception