我正在创建的iPad应用程序遇到一些麻烦。在一个点上有一个约80帧的简单图像序列/动画。
代码看起来像这样(这是一个UIView子类的子类):
- (id)init {
UIImage *theImage = [UIImage imageNamed:@"chart0075.jpg"];
// get the frame
CGRect lgeFrame = CGRectMake(20, 130, theImage.size.width, theImage.size.height);
// set the new frame
CGFloat newHeight = theImage.size.height/1.65;
CGFloat newWidth = theImage.size.width/1.65;
CGRect smlFrame = CGRectMake(480, 200, newWidth, newHeight);
self = [super initWithLargeFrame:lgeFrame smallFrame:smlFrame];
if(self){
// lets add the image as an image view
theImageView = [[UIImageView alloc] initWithImage:theImage];
[theImageView setFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
[theImageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
[self addSubview:theImageView];
// now we need to make an array of images for the image sequence
NSMutableArray *imageSeq = [NSMutableArray array];
for(int i = 1; i < 76; i++){
NSString *jpgnumber;
if(i<10){
jpgnumber = [NSString stringWithFormat:@"000%i",i];
}
else {
jpgnumber = [NSString stringWithFormat:@"00%i",i];
}
NSString *imageFile = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"chart%@",jpgnumber] ofType:@"jpg"];
[imageSeq addObject:[UIImage imageWithContentsOfFile:imageFile]];
}
[theImageView setAnimationImages:imageSeq];
[theImageView setAnimationDuration:1.5];
[theImageView setAnimationRepeatCount:1];
}
return self;
}
然后在反向捏合手势上,图像应该是动画的。第一次执行此反向捏合手势时,需要几秒钟才能启动动画。有时我得到一个内存警告级别1,应用程序将崩溃。
问题出在这里? 80 jpgs是不是太大了,不能一次保存在内存中?他们总共不到2mb,所以他们肯定不应该填满ipad的记忆吗?
我用分配工具查看了它,这表明我在动画时有大约40kb的内存,但是在随后的动画中它会回到0。 (尽管分配工具确实让我感到困惑)。
有谁知道造成这种情况的原因是什么?如有必要,我可以发布更多代码或其他内容吗?
非常感谢:)
答案 0 :(得分:1)
您的内存使用量取决于图像未压缩的大小。宽度乘以高度时间4将告诉您图像将采用的每个字节数,乘以图像数量以获得总数。
我的猜测是你处于过度记忆的边缘。
使用VMTracker仪器运行仪器以确定。你应该看看Dirty Resident记忆。
WWDC '10和WWDC '09都在仪器和内存使用分析方面都有很好的内容。
答案 1 :(得分:0)
您没有发布ImageView
[theImageView release]