当我在我的应用程序中导航时,我得到了一个不寻常且不断的虚拟内存构建,这导致了性能飙升并最终导致内存压力崩溃。应用物理内存永远不会超过10mb到20mb,虚拟内存在崩溃时达到200mb到300mb的范围。
我使用ARC。
基本上,我认为问题是我采用我的cellForRowAtIndexPath / itemForRowAtIndexPath方法的方法,因为该应用非常强烈地基于通过tableviews和集合视图提供的内容。
基本上,我正在做的是将注册到自定义XIB文件的单元出列,没有类文件(我认为这是问题),然后通过标签而不是它们引用那些出列单元格的对象作为一个类并访问他们的属性。
从我的代码和我收集到的内容中,我假设我的集合视图或表格重新加载,它基本上创建了其他单元格,并不需要因为细胞已经被创建了,所以它只是在相同的细胞上覆盖相同的内容?那个或者使用UILabel * name =(UILabel *)等...在不应该的地方增加引用计数,这会导致内存使用量猛增,因为对象没有被解除分配?
这里是应用程序中用于创建项目的最密集部分之一的代码片段,是我的逻辑/流程导致我的虚拟内存问题?
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:PRODUCTS_FEED_CELL_IDENTIFIER forIndexPath:indexPath];
NSDictionary *product = [self.productsFeedItems objectAtIndex:indexPath.row];
UIImageView *productThumbnailView = (UIImageView *)[cell viewWithTag:PRODUCTS_FEED_COLLECTION_ITEM_TAG_THUMBNAIL];
[productThumbnailView setImageWithURL:[APIController resourceUrlForUserId:[product objectForKey:@"userId"] resourceName:[product objectForKey:@"thumbnail"]]];
UILabel *productPriceLabel = (UILabel *)[cell viewWithTag:PRODUCTS_FEED_COLLECTION_ITEM_TAG_PRICE];
productPriceLabel.text = [NSString stringWithFormat:@"$%@", [product objectForKey:@"price"]];
NSString *likeImage = ([[product objectForKey:@"liked"] isEqualToString:@"1"]) ? @"feedLikeSelected.png" : @"feedLikeUnselected.png";
UIButton *productLikeButton = (UIButton *)[cell viewWithTag:PRODUCTS_FEED_COLLECTION_ITEM_TAG_LIKE];
[productLikeButton setImage:[UIImage imageNamed:likeImage] forState:UIControlStateNormal];
return cell;
}
堆分配&仪器截图
答案 0 :(得分:0)
问题可能来自于您尝试从服务器获取的图像非常庞大。使用setImageWithURL:
检查您正在设置的图像的尺寸。此外,你是否缓存这些图像?