gpt4 book ai didi

ios - UIImageView 由于内存警告而崩溃,尝试加载大量图像

转载 作者:行者123 更新时间:2023-11-29 03:44:52 24 4
gpt4 key购买 nike

我正在制作一个像电影播放器​​一样的应用程序,但我没有显示视频,而是在图像帧中播放电影。 slider 用于向前和向后移动“电影”,如果释放 slider ,“电影”将自动播放到一个章节。我通过使用 UIImageView 并在 slider 的每个值更改时更改 image 属性来实现此目的。一段时间后,应用程序因内存警告而崩溃。我无法使用 UIImage 的动画,因为我想通过拖动 slider 来控制位置(也称为可见图像/帧)。所以我有一个 ImageManager 类,它在 init 时加载数组中字符串中的所有图像名称(总共 1500 个图像,每个图像大约 150kb)。

- (id) initWithCanvas:(UIImageView*) canvasView{
self = [super init];
if (self) {
totalImages = 1500;
self.canvas = canvasView;
self.images = [[NSMutableArray alloc] init];
for (int i=0; i<totalImages; i++){
[self.images addObject:[NSString stringWithFormat:@"frame_%04d.jpg", i]];
i = i + 4; // I use this to skip 4 frames
}
previewsImageIndex = -1;
[self setImageAtPosition:0];
}
return self;
}

然后我有一个在 UISlider 的值更改时触发的函数,该函数查找当前图像名称并从图像名称构造 UIImage 并将其设置为 UIImageView

- (void) setImageAtPosition:(CGFloat)percentage{
currentImage = nil;
int position = percentage * [self.images count];
if (position != previewsImageIndex){
previewsImageIndex = position;
NSLog(@"Got image:%d at percentage: %f", position, percentage);
if (position < [self.images count]){
self.canvas.image = nil;
currentImage = [UIImage imageNamed:[self.images objectAtIndex:position]];
[self.canvas setImage:currentImage];
currentImage = nil;
//[currentImage release];
}
}
}

即使我将 currentImage 和 canvas.image 设置为 nil,应用程序仍然会在一段时间后崩溃。我不明白我哪里有内存泄漏。另外,我用ARC编码,所以没有发布。

除了 UIImage View 之外,还有其他更好的方法吗?我想要逐帧查看功能,而 MPMoviePlayer 或 AVPlayer 无法进行细粒度的清理。

最佳答案

您将需要使用[UIImage imageWithContentsOfFile:@""]方法,因为它不缓存图像。 imageNamed:缓存通过它加载的所有图像。

关于ios - UIImageView 由于内存警告而崩溃,尝试加载大量图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17859056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com