在我的应用程序中使用自定义 UICollectionViewCell 时如何停止内存警告
Posted
技术标签:
【中文标题】在我的应用程序中使用自定义 UICollectionViewCell 时如何停止内存警告【英文标题】:How to stop memory warning when using custom UICollectionViewCell in my app 【发布时间】:2014-04-05 09:10:29 【问题描述】:我做错了什么?我已经使用 parse.com 仪表板上传了一些 jpeg 图像,并设置了一些其他数据,例如标题和价格。在我的设备上滚动浏览我的 collectionView 时,它断断续续,然后最终崩溃。
代码如下:
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
return 1;
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
return [[self objects] count];
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object
NSArray *people = [self objects];
static NSString *CellIdentifier = @"Cell";
VAGGarmentCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier: CellIdentifier forIndexPath:indexPath];
PFObject *current;
current = [people objectAtIndex:indexPath.item];
PFFile *userImageFile = current[@"image"];
[userImageFile getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error)
UIImage *image = [UIImage imageWithData:imageData];
[[cell contentView] setContentMode: UIViewContentModeScaleAspectFit];
[[cell imageView] setImage:image];
];
[[cell title] setText:[current valueForKey:@"title"]];
[[cell price] setText:[NSString stringWithFormat: @"£%@", [current valueForKey:@"price"]]];
return cell;
我有一种强烈的感觉,这与我的图像有关。我希望有人能帮我解决这个问题。这是我第一次处理collection view。
感谢您的宝贵时间。 亲切的问候。
【问题讨论】:
你能 NSlog 你的图像大小并检查实际图像在集合视图中的大小 崩溃有什么异常?它可能与下载图像的方法有关。您可以考虑改用 SDWebImage 之类的东西。 @andreamazz 我收到“因内存压力而终止”消息。 @JSA986 图像大小为 2480.00 x 3508.00 (使用 NSLog(@"%.2f",image.size.width); NSLog(@"%.2f",image.size.height); ) 【参考方案1】:您的图像大小是导致收藏视图中的内存问题和不连贯滚动的原因。调整图像大小,将调整大小的图像添加到您的收藏视图
//resize image
CGSize destinationSize = CGSizeMake(264,476);
UIGraphicsBeginImageContext(destinationSize);
[image drawInRect:CGRectMake(0,0,destinationSize.width, destinationSize.height)];
//New image
UIImage*newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//Optimise image
NSData *imageDataCompressed = UIImageJPEGRepresentation(newImage, 0.4f);
NSLog(@"Image Size %@", NSStringFromCGSize(newImage.size));//log size of image
【讨论】:
崩溃已停止,但滚动时仍然非常不稳定。可以看到用不同图像替换图像的单元格。 我又看了一遍,删除了图像和标签等。仍然有切碎。我删除了 getDataInBackgroundWithBlock 块,砍伐消失了。这显然与在后台加载的图像有关。我的 UITable 代码几乎与此相同,并且工作正常。不知道这里有什么不同。以上是关于在我的应用程序中使用自定义 UICollectionViewCell 时如何停止内存警告的主要内容,如果未能解决你的问题,请参考以下文章
如何将子视图添加到自定义 UICollectionViewCell
如何在我的自定义应用程序中禁用 flashplayer 上的声音?