2014-04-26 2 views
0

내가 사진 갤러리 코드를하려고 몇 가지 문제에 직면하고있다 :메모리 문제

모든 것이 괜찮하지만 세포 내 이미지를 삽입 할 때, 난 항상 "받은 메모리 경고"또는 "응용 프로그램을 얻을 수를 메모리 부족으로 인해 완료되었습니다 "오류가 발생합니다. 내가 게시하기 전에 많은 것들을 시도했지만 아무 일하지

...

제발 도와주세요 :) 여기 내 코드입니다 :

의 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

이 얼마나 큰 있습니다 이 이미지들? 최근 앱에서도 비슷한 문제가 발생했습니다. 나의 첫 번째 제안은이 사진의 축소판 버전을 훨씬 더 작게로드하는 것입니다. 여기에 우리의 그것을 수행하는 방법이다 :

- (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 = [자체 이미지 스케일 : [UIImage imageNamed : [self.photosDictionary objectForKey : @ (indexPath.row)]] toMaxSideSize : 200];

This StackOverflow post은 재사용을위한 다른 옵션을 포함합니다. cell.backgroundView.image = thumbnail;

+0

안녕하세요, 내 ipad 공기가 충돌하지 않지만 여전히 메모리 경고를 받고 그것은 여전히 ​​매우 느리게 scull! 나는 이해하지 못한다 !! – user3439023

+0

백그라운드 스레드에서 크기 조정을 시도하십시오. – eckyzero