所以这根本没有意义。我有一种扩展方法可以NSMutableArray
将项目从一个索引移动到另一个索引。这是一个相当简单的方法,当我在调试配置中编译我的应用程序时它可以完美运行。但是,如果我在发布配置中编译应用程序,如果我从一个项目向下移动(从索引 > 到索引),它会崩溃。崩溃不是索引越界错误。我的局部变量被搞砸了,我不知道为什么。这是整个方法:
- (void) moveObjectAtIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex{
if (fromIndex == toIndex) return;
if (fromIndex >= self.count) return;
if (toIndex >= self.count) toIndex = self.count - 1; //toIndex too large, assume a move to end
id movingObject = [self objectAtIndex:fromIndex];
if (fromIndex < toIndex){
for (int i = fromIndex; i <= toIndex; i++){
[self replaceObjectAtIndex:i withObject:(i == toIndex) ? movingObject : [self objectAtIndex:i + 1]];
}
} else {
//The problem occurs in this block (though the crash doesn't always occur here)
id cObject;
id prevObject;
for (int i = toIndex; i <= fromIndex; i++){
//usually on the last loop, my "prevObject" become 'messed up' after the following line:
cObject = [self objectAtIndex:i];
[self replaceObjectAtIndex:i withObject:(i == toIndex) ? movingObject : prevObject];
prevObject = cObject;
}
}
}
我无法单步执行代码,因为它是发布版本,但我已经在循环的每个步骤中对变量进行了 NSLogged。通常,在最后一个循环中,prevObject
var 在完成时被分配一些随机变量cObject = [self objectAtIndex:i];
。有时它设置为nil
但通常它是我的代码中的其他一些随机变量。如果是nil
当我尝试替换数组中的对象时代码崩溃。否则,当我尝试访问数组并接收回错误的对象时,它稍后会崩溃。
有谁知道发生了什么?我的意思是,这个问题发生在 4 行代码中,我已经经历了一百多次。