照片库iOS中的内存问题

时间:2014-04-26 15:24:23

标签: objective-c memory uicollectionview gallery photo

我在尝试编写照片库时遇到了一些问题:

一切都很好但是当我在单元格中插入我的图像时,我总是得到“收到的内存警告”或“应用程序因内存压力而完成”错误。

我在发布之前尝试过很多东西,但没有任何效果......

请帮帮我:)这是我的代码:

ViewDidLoad:

    self.photosDictionary = [[NSDictionary alloc]initWithObjectsAndKeys:@"1.jpeg",@0,@"2.jpeg",@1, @"3.jpeg",@2,@"4.jpeg",@3,@"5.jpeg",
                         @4,@"6.jpeg",@5,@"7.jpeg",@6,@"8.jpeg",@7,@"9.jpeg",@8,
                         @"10.jpeg",@9,@"11.jpeg",@10,@"12.jpeg",@11,@"13.jpeg",
                         @12,@"14.jpeg",@13,@"15.jpeg",@14,@"16.jpeg",@15,@"17.jpeg",
                         @16,@"18.jpeg",@17, @"19.jpeg",@18,@"20.jpeg",@19,nil];

-(UICollectionViewCell*) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

if(cell.backgroundView == nil){
    cell.backgroundView =   [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.photosDictionary objectForKey:@(indexPath.row)]]]; 
}

}

1 个答案:

答案 0 :(得分:1)

这些图片有多大?我在最近的应用程序中遇到了类似的问题。我的第一个建议是加载这些照片的缩略图版本。这是我们的方法:

- (UIImage*)imageScaled:(UIImage *) image toMaxSideSize:(int) maxSize
{
    float scaleFactor = 0;

    if(image.size.width > image.size.height)scaleFactor = maxSize / image.size.width;
    else scaleFactor = maxSize / image.size.height;

    CGSize newSize = CGSizeMake(image.size.width * scaleFactor, image.size.height * scaleFactor);

    UIGraphicsBeginImageContext(newSize);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage* updatedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return updatedImage;
}

因此,我们不是将完整图像加载到每个UITableViewCell中,而是像这样加载缩略图。在cellForRowAtIndexPath中:

UIImage * thumbnail = [self imageScaled:[UIImage imageNamed:[self.photosDictionary objectForKey:@(indexPath.row)]] toMaxSideSize:200];

This StackOverflow post涵盖了重新缩放的其他一些选项。 cell.backgroundView.image = thumbnail;