【发布时间】:2016-05-28 00:03:34
【问题描述】:
我的项目中有一个 gif 文件。我正在尝试在我的UIImageView 中显示该 gif 文件。这是我的代码:
NSData* gifOriginalImageData = [NSData dataWithContentsOfURL:url];// url of the gif file
CGImageSourceRef src = CGImageSourceCreateWithData((CFDataRef)gifOriginalImageData, NULL);
NSMutableArray *arr = [[NSMutableArray alloc] init];
NSInteger imagesCountInGifFile = CGImageSourceGetCount(src);
CGImageRef imagesOut[imagesCountInGifFile];
for (int i = 0; i < imagesCountInGifFile; ++i) {
[arr addObject:[UIImage imageWithCGImage:CGImageSourceCreateImageAtIndex(src, i, NULL)]];
}
self.onboardingImageView.animationImages = arr;
self.onboardingImageView.animationDuration = 1.5;
self.onboardingImageView.animationRepeatCount = 2;
[self.onboardingImageView startAnimating];
我可以使用此代码成功显示 gif 文件。但是,它会导致内存泄漏高达 250mb,包含 60 张图像。我尝试使用给定的代码减少内存,但是再次没有成功。
self.onboardingImageView.animationImages = nil;
CFRelease(src);
【问题讨论】:
-
单张图片的尺寸是多少?你不能在将它们添加到数组之前压缩这些图像吗?
-
图片大小为100kb。我认为这并不过分。 @TejaNandamuri
-
你也应该释放
imagesOut,因为有"ZZZCreate` -
我不知道为什么你需要一个
imagesOut的数组 - 只需为循环的每次迭代创建一个CGImage,将其包装为UIImage,然后将UIImage分配给你的数组并释放CGImage。一般规则是每次调用包含单词Create的函数时,都应该有一个匹配的释放调用。 -
释放 imagesOut 并没有解决问题@Larme。
标签: ios objective-c