1

在我的 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];

这会导致应用程序崩溃,EXC_BAD_ACCESS 在线zombie[i].animationImages = flyingZombieImages;

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]];
    }

为什么会这样?有解决方法吗?

4

1 回答 1

1

正如 Dima 提到的 flyZombieImages 可能没有正确初始化,这导致了崩溃。但是,当您创建 UIImageView 的新实例时,还有另一个问题:

zombie[i] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"zh.png"]];

此时,您已经有了对存储在此变量中的旧 UIImageView 的引用。您正在丢失对它的引用,并且很可能会泄漏它的内存。您还希望从视图层次结构中删除旧的 UIImageView 并添加新的。

更好的方法是使用原始的 UIImageView 并通过将此行替换为以下内容来更改其图像:

zombie[i].image = [UIImage imageNamed:@"zh.png"];
于 2012-07-01T19:35:06.843 回答