2013-01-24 2 views
0

애니메이션에 시퀀스에서 150 개의 이미지를 사용하고 있습니다.UIImageView에서 이미지를 애니메이션화하는 데 너무 많은 메모리가 필요합니다.

여기 내 코드입니다.

NSMutableArray * arrImages = [[NSMutableArray alloc] initWithCapacity : 0];

for(int i = 0; i <=158; i++) 
{ 
    UIImage* image = [UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]]; 
    [arrImages addObject:image]; 
} 

babyimage.animationImages = arrImages; 
[arrImages release]; 

babyimage.animationDuration = 6.15; [babyimage startAnimating];

그러나 너무 많은 메모리를 사용하고 있습니다. 1 분 동안 재생하면 콘솔에 메모리 경고가 표시됩니다. 그리고 나서 추락했습니다. 나는 이미지 해상도도 감소 시켰고 더 나은 품질을 위해서는 150을 덜 만들 수 없습니다.

메모리 문제없이이 애니메이션을 수행하는 더 좋은 방법이 있습니까? 덕분에 많은 PLZ 도움 ...

답변

3

시도,

대신 [UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]]

사용

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"baby%05d.jpg",i] ofType:nil]] 

이유는 imageNames 이미지를 캐시하고

경고 메모리를 해제 할 때까지 해제하지 않습니다이다

호프가 도움이 되었길 바랍니다 ..

EDIT : -

또한 전체 이미지를 배열에 저장하지 말고 원하는 경우 이미지 이름을 저장하거나 저장하지 마십시오. 또한 많은 메모리가 필요합니다.

+0

150 이미지가 여전히 메모리에 한 번에로드 될 필요가 있기 때문에 이것은 도움이되지 않을 것입니다 ... 캐싱되지는 않지만 여전히 'arrImages'에 의해 유지되므로 할당 해제되지 않습니다. – sergio

+0

@sergio 나는 내 응용 프로그램에서 동일한 기능을 사용하고 있으므로 이런 식으로 응용 프로그램 충돌이 발생하지 않습니다. 나는 250 kb 이미지를 루프로 돌리고있다. 크기는 250 kb이다. –

+0

@ P.J 답장을 보내 주셔서 감사합니다. 나는 이것을 시도했지만 모든 이미지 load.BTW로로드하는 데 너무 많은 시간이 걸립니다. –

0

애니메이션을 지정하지 않았다는 사실을 알지 못합니다. 그러나 코드를 작성하는 경우 다음 알고리즘을 따르게됩니다.

이것은 특정 시간에 단 하나의 이미지 만 표시된다고 가정하고 있지만 전환하는 동안 두 개의 컨볼 루션을 가지게됩니다.

procedureAnimate: 
    photo_1 = allocate(file_address_array[i++]) 
    while i < MAX_PHOTOS 
     photo_2 = allocate(file_address_array[i++]) 
     photo_3 = allocate(file_address_array[i++]) 
     perform_animation(photo_1, photo_2) 
     release(photo_1) 
     photo_1 = photo_2 
     photo_2 = photo_3 
    release(last_two) 

내가 그런 일을하는 데 필요한지는 확실하지 않습니다. 그러나 이것은 훨씬 더 효율적입니다.

(5 월에 alloc/release 로그인이 잘못되었지만 아침에 오전 5.14에 작동하는 것과 일치 함). 이것이 작동하지 않으면 알려주십시오.

관련 문제