2013-05-14 2 views
1

UIImage 애니메이션을 사용하고 있으며 응용 프로그램을 사용하는 여러 사용자가 많은 메모리 누수 및 충돌을 일으키고 있습니다.UIImage 애니메이션 크래시/메모리 누수가 발생하는 앱

아래 코드는 제 코드입니다. viewDidAppear에서 두 애니메이션 집합을 미리로드합니다.

pointsView.image = [UIImage imageNamed : @ "C72.png"];

NSMutableArray *menuanimationImages = [[NSMutableArray alloc] initWithCapacity:21]; 
    NSString *imageName; 

    for(int aniCount = 0; aniCount < 72; aniCount++) 
    { 
     imageName = [NSString stringWithFormat:@"C%d.png", aniCount]; 
     [menuanimationImages addObject:[UIImage imageNamed:imageName]]; 
    } 

    pointsView.animationImages = menuanimationImages; 

    pointsView2.image = [UIImage imageNamed:@"I72.png"]; 

    NSMutableArray *menuanimationImagess = [[NSMutableArray alloc] initWithCapacity:21]; 
    NSString *imageNames; 

    for(int aniCounts = 0; aniCounts < 72; aniCounts++) 
    { 
     imageNames = [NSString stringWithFormat:@"I%d.png", aniCounts]; 
     [menuanimationImagess addObject:[UIImage imageNamed:imageNames]]; 
    } 

    pointsView2.animationImages = menuanimationImagess; 
} 

나는 다음

pointsView.animationDuration = 3.11; 
pointsView.animationRepeatCount = 1; 
[pointsView startAnimating]; 

어떤 제안을 사용하여 애니메이션을 실행하고?

+0

이미지 크기가 어떻게됩니까? – Purva

+0

@purva 320by480 –

+0

이것은 한 번에 72 개의 이미지를 사용하고 있기 때문에 PNG 번호를 30 또는 40으로 낮추고 현재 충돌하는지 확인하기 때문입니다 – Purva

답변

0

72 개의 PNG 이미지가 한 번에 메모리에로드됩니다. 그리고 그 이미지의 크기에 따라, 당신은 아마도 메모리 경고를 내고 결국 추락시키는 몇몇 오래된 장치의 메모리 한계에 도달 할 수 있습니다. 제 제안은 72 이미지 애니메이션을하지 않는 것입니다. 품질과 메모리 크기를 줄이는 각 이미지를 압축하려고 할 수 있지만 애니메이션을 수행하기 위해 72 이미지를로드하는 것은 처음에는 좋지 않습니다.

+0

버튼을 누를 때만 이미지를로드하면 어떻게됩니까? 그것은 여전히 ​​당신이 생각하는 문제가 될 것입니까? –

+0

많은 이미지를 한 번에 메모리에로드하면 문제가됩니다. 휴대 기기는 데스크톱 컴퓨터, 특히 오래된 기기보다 더 제한적이라는 점을 명심하십시오. iPhone 3G 또는 iPad와 같은 구형 장치를 Mac에 연결하면 for 루프를 통해 재미있는 이미지를 메모리에 할당하면서 콘솔에 메모리 경고 메시지가 표시됩니다. 결국에는 메모리가 부족하여 응용 프로그램이 종료됩니다. –

+0

[예제 릴리스]를 사용하여 메모리에서 데이터를 해제합니다. 메모리에서 완전히 풀어 줘? 이것은 단지 하나의 질문입니다. 어쩌면 내가 앱의 다른 객체들로부터 공간을 확보한다면 그것은 효과가있을 것이다. –

4

이 주제에 대한 블로그 게시물 (video-and-memory-usage-on-ios-devices)을 읽어보십시오. 문제의 근본 원인은 단순히 많은 이미지를 메인 메모리에 동시에로드 할 수 없다는 것입니다. 단순히 UIImageView.animationImages API를 사용하지 않아도되고, 심하게 부러지고 개발자가 기기에서 실행할 때 충돌하는 잘못된 코드를 작성하도록 유도합니다.

관련 문제