我在屏幕上同时有多个水平滚动的集合视图。它们都充满了图像。所有这些图像都通过 Parse api 在后台加载。我正在运行 Instrument 的分配,并且匿名 VM:ImageIO_JPEG_DATA 类别占用了大部分正在使用的内存。应用程序中的所有内存大约为 40,而该类别超过 55,这使得总数约为 100。该类别根本不会下降,只是保持一致。我可以做什么来从我的收藏视图中的图像中释放这些内存?
这是我的集合视图的代码:
.m 代表我的集合视图控制器
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" forIndexPath:indexPath];
if (cell) {
[cell.loadingImageIndicator setHidden:NO];
[cell.loadingImageIndicator startAnimating];
id photo = [self.collectionViewPhotos objectAtIndex:indexPath.item];
if ([photo isKindOfClass:[PFObject class]]) {
PFObject *photoObject = (PFObject *)photo;
PFFile *imageFile = [photoObject objectForKey:kPhotoPictureKey];
[cell.cellImage setFile:imageFile];
[cell.cellImage loadInBackground:^(UIImage *image, NSError *error) {
[cell.cellImage setContentMode:UIViewContentModeScaleAspectFill];
[cell.loadingImageIndicator stopAnimating];
[cell.loadingImageIndicator setHidden:YES];
}];
} else if ([photo isKindOfClass:[UIImage class]]) {
[cell.cellImage setImage:photo];
[cell.cellImage setContentMode:UIViewContentModeScaleAspectFill];
}
}
return cell;
}
.m 代表 CollectionViewCell
- (void)prepareForReuse
{
self.cellImage.image = nil;
}
- (void)dealloc
{
self.cellImage = nil;
}
Edit: Photo of instruments
我在照片库类型的应用程序中遇到了同样的问题,并且遇到了与所谓的 ImageIO_JPEG_DATA 类别中的分配累积并永远保持“活动”相同的问题,导致我的应用程序内存不足。奇怪的是,这种情况只发生在我测试的 iPad 上,而不是在 ios 模拟器上(没有显示内存问题)。
布莱恩的建议(如下)对我有用。我的应用程序最初使用一个数组,其中每个元素除其他外还包含一个 UIImage。这些图像被用在各种 UIScrollViewController 中。
当我需要加载图像时,如果我使用
[UIImage imageWithContentsOfFile:路径]
内存问题(由 ImageIO_Malloc 正在进行的一些莫名其妙的缓存引起)消失了,并且 ImageIO_JPEG_DATA 分配停止堆积并被释放,而不是直接引用数组中的 UIImage。
我自己在数百万年之内永远不可能想出这个解决方案,所以感谢布莱恩。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)