我收到了一个来自我的应用程序的崩溃,看起来很奇怪,有以下日志:
*由于未捕获的异常终止应用' NSRangeException',原因:' * - [__ NSArrayM removeObjectAtIndex:]:index 4294967293 超出界限[0 .. 4294967293]'
根据堆栈跟踪,这来自下面的代码:
if ([self.itemList count] > 0) {
[self.itemList removeAllObjects];
}
根据我的理解,removeAllObjects
始终是一个安全的操作,不应该像这样崩溃。我在这里错过了一些东西。任何正确方向的指导都会非常有用。
修改:
这是我声明的itemList
属性:
@property (nonatomic, strong) NSMutableArray *itemList;
答案 0 :(得分:0)
很可能是由于该属性是非原子的。正如您所提到的,此代码是多线程的,并且您使用的是非线程安全的属性。
- 由于未捕获的异常终止应用' NSRangeException',原因:' * - [__ NSArrayM removeObjectAtIndex:]:索引4294967293超出界限[0 .. 4294967293]'
此错误仅表示必须删除的对象已被删除,因此返回的索引为' 4294967293。'尝试将数组设置为原子。也可以尝试使用类似问题中提到的@synchronized: