我有一个我不断迭代NSMutableArray
的UIImageViews
(使用 a CADisplayLink
)。我这样做是为了UIImageViews
在屏幕上不断移动。
当我UIImageView
从数组中删除 a 时,有时会出现错误:
EXC_BAD_ACCESS (code=1, address=0x20000008)
但是,在我开始使用 ARC/iOS6 之前,我过去常常收到错误“数组在被枚举时发生变异”,所以我认为这两个错误的含义完全相同,但我不确定。
无论如何,这是我的问题。使用以下任何方法从数组中删除 aUIImageView
会给我上述错误。
[imageViews removeObject:imageView];
[imageViews performSelector:@selector(removeObject:) withObject:imageView];
[imageViews performSelectorOnMainThread:@selector(removeObject:) withObject:imageView waitUntilDone:YES];
但是,使用以下任何一种方法都不会给我错误。
[imageViews performSelectorOnMainThread:@selector(removeObject:) withObject:imageView waitUntilDone:NO];
[imageViews performSelector:@selector(removeObject:) withObject:imageView afterDelay:.01];
那么有人可以向我解释为什么从NSMutableArray
使用上面列出的第一组方法中删除一个对象会给我我认为“数组在被枚举时发生突变”的错误,而使用第二组方法永远不会给我这个错误?
我一直在使用上面列出的第二组方法来解决这个错误(如果我使用它们,一切都很好)但我想知道为什么我的问题在我使用它们时得到了解决,以及它是否安全使用这两种方法之一。
这是我第一次发布问题,如果我以错误的方式发布此问题,请原谅我。