【发布时间】:2014-06-27 10:08:14
【问题描述】:
当我浏览我的应用程序时,我的虚拟内存不断增加,这会导致性能不佳并最终导致内存压力崩溃。应用程序物理内存从不超过 10mb 到 20mb,但虚拟内存在崩溃时达到了 200mb 到 300mb 的峰值。
我正在使用 ARC。
基本上,我认为问题在于我对 cellForRowAtIndexPath / itemForRowAtIndexPath 方法所采用的方法,因为该应用非常强烈地基于通过表格视图和集合视图提供的内容。
基本上,我所做的是将注册到自定义 XIB 文件的单元格出列,这些文件没有类文件(我认为这是问题所在),然后通过标签而不是它们作为类并访问它们的属性。
根据我的代码和收集到的信息,我假设任何时候我的集合视图或表格重新加载,它基本上都创建了额外的单元格,因为单元格已经创建,所以它只是在相同的单元格上覆盖相同的内容?那个或使用 UILabel *name = (UILabel *)etc.. 正在增加不应该的地方的引用计数,这导致内存使用量猛增,因为对象没有被释放?
这是应用程序中用于创建项目的最密集部分之一的代码片段,我的逻辑/流程是否会导致我的虚拟内存问题?
- (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;
}
堆分配和仪器屏幕截图
【问题讨论】:
-
请添加可编辑的代码,而不是图片
标签: ios iphone objective-c xcode cocoa-touch