UIImageView动画崩溃(sigabrt)

时间:2011-10-14 00:47:53

标签: ios

知道为什么会崩溃吗?我做错了什么?

谢谢!

-(IBAction)animationOneStart { 

NSMutableArray* arrayOfImages = [[NSMutableArray alloc]initWithCapacity:10];

for(int count = 1; count <= 22; count++)
{
    NSString *path = [NSString stringWithFormat:@"testDance3_%03d.jpg", count];
    UIImage* img = [[UIImage alloc]initWithContentsOfFile:path];
    [arrayOfImages addObject:img];
    [img release];
}

loadingImageView.animationImages = arrayOfImages;
[arrayOfImages release];

loadingImageView.animationDuration = 3;
loadingImageView.animationRepeatCount = 1; //Repeats indefinitely

[loadingImageView startAnimating];

loadingImageView.animationImages = nil;
[loadingImageView release];
}

3 个答案:

答案 0 :(得分:1)

尝试初始化您的NSMutableDictionary,其容量与您将存储在其中的相同数量的对象相同。如果这不起作用,我会尝试评论这两行:

//loadingImageView.animationImages = nil;
//[loadingImageView release];

在此代码的范围内,您的其他调用显得平衡。但是我们无法看到loadingImageView中发生了什么,所以我的猜测是,loadImageView本身或它的动画都是过早发布的。

答案 1 :(得分:1)

我看不到足够的代码确认这一点,但有几件可疑的事情在这里:

[loadingImageView startAnimating];

loadingImageView.animationImages = nil;
[loadingImageView release];

因此,在动画运行时,您正在发布正在动画的图像?或者它本身就是动画的视图?可能是其中一个或两个都是问题。

如果动画应无限期运行,则需要无限期地保持视图。如果它最终停止,你应该在它停止后释放它。

答案 2 :(得分:0)

传递nil时,调用addObject将失败。当系统内存不足并且无法分配更多内容时,UIImage可能为零。当发生这种情况取决于您的图像有多大,但基本上您可以确定稍后使用loadingImageView.animationImages与同时分配所有UIImage对象相结合将导致您的应用程序崩溃。另见playing-looping-images-sequence-in-uiview。你基本上需要一种不同时保存内存中所有图像的不同方法,未压缩的图像会消耗过多的内存。