在我的iPhone应用程序的viewDidLoad方法中,我有以下代码:
zombie[i].animationImages = zombieImages;
zombie[i].animationDuration = 0.8/zombieSpeed[i];
zombie[i].animationRepeatCount = -1;
[zombie[i] startAnimating];
稍后在应用程序中调用以下代码:
[zombie[i] stopAnimating];
zombie[i] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"zh.png"]];
zombie[i].animationImages = flyingZombieImages;
zombie[i].animationDuration = 0.8/zombieSpeed[i];
zombie[i].animationRepeatCount = -1;
[zombie[i] startAnimating];
这会导致应用崩溃,行zombie[i].animationImages = flyingZombieImages;
上有EXC_BAD_ACCESS
flyingZombieImages
:( zombieImages
以相同方式初始化)
NSMutableArray *flyingZombieImages = [NSMutableArray array];
for (NSUInteger i=1; i <= 29; i++) {
NSString *imageName = [NSString stringWithFormat:@"flzom%d.png", i];
[flyingZombieImages addObject:[UIImage imageNamed:imageName]];
}
为什么会这样?有解决方法吗?
答案 0 :(得分:1)
正如Dima所说,flyingZombieImages可能没有正确初始化,这导致了崩溃。但是,当您创建UIImageView的新实例时还存在另一个问题:
zombie[i] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"zh.png"]];
此时您已经拥有对此变量中存储的旧UIImageView的引用。你正在失去对它的引用,很可能会泄漏它的记忆。您还希望从视图层次结构中删除旧的UIImageView并添加新的UIImageView。
更好的方法是使用原始的UIImageView并通过用以下代码替换此行来更改其图像:
zombie[i].image = [UIImage imageNamed:@"zh.png"];