NSMutableArray奇怪崩溃 - removeObjectAtIndex

时间:2017-07-13 05:59:11

标签: objective-c cocoa-touch nsmutablearray

我收到了一个来自我的应用程序的崩溃,看起来很奇怪,有以下日志:

  

*由于未捕获的异常终止应用' NSRangeException',原因:' * - [__ NSArrayM removeObjectAtIndex:]:index 4294967293   超出界限[0 .. 4294967293]'

根据堆栈跟踪,这来自下面的代码:

if ([self.itemList count] > 0) {
    [self.itemList removeAllObjects];
}

根据我的理解,removeAllObjects始终是一个安全的操作,不应该像这样崩溃。我在这里错过了一些东西。任何正确方向的指导都会非常有用。

修改

这是我声明的itemList属性:

@property (nonatomic, strong) NSMutableArray *itemList;

1 个答案:

答案 0 :(得分:0)

很可能是由于该属性是非原子的。正如您所提到的,此代码是多线程的,并且您使用的是非线程安全的属性。

  
      
  • 由于未捕获的异常终止应用' NSRangeException',原因:' * - [__ NSArrayM removeObjectAtIndex:]:索引4294967293超出界限[0 .. 4294967293]'
  •   

此错误仅表示必须删除的对象已被删除,因此返回的索引为' 4294967293。'尝试将数组设置为原子。也可以尝试使用类似问题中提到的@synchronized:

NSMutableArray removeAllObjects beyond bounds exception