2

많은 비디오 및 대형 PNG 애니메이션 시퀀스를 사용하는 iPad 응용 프로그램을 작성하면서 더 이상 필요하지 않을 때 모든 리소스를 해제하도록주의를 기울입니다. 인 스트 루먼트는 메모리 누수가 없음을 보여 주며 할당량은 앱이 약 30MB 이상을 할당하지 않는다는 것을 보여줍니다. 그러나 Activity Monitor를 살펴보면 실제 메모리와 가상 메모리가 지속적으로 증가하는 것을 볼 수 있습니다. 모든 dealloc 메서드에 NSLogs를 넣었고, 내가 풀어 놓은 모든 객체의 할당이 해제되었습니다. 그러나 내 응용 프로그램은 0 신호로 사망하고 있습니다. 아무도 제안 사항이 있습니까?iPad 메모리 사용량이 지속적으로 증가합니다.

+0

잠시 후 어떤 물체가 아직 살아 있는지 악기로 확인하십시오. – Eiko

답변

2

당신은 이미이 작업을 수행하고있을 수 있지만 Allocations 도구를 사용할 때는 UI와 상호 작용할 때 "힙 샷"을 가져옵니다. 이렇게하면 각 간격과 개체의 수명주기 동안 할당되는 내용을 알 수 있습니다. Bill Bumgarner는 읽을 가치가있는이 강력한 도구에 대해 excellent blog entry을 보유하고 있습니다.

+0

각 힙 스냅 샷에서 인스트루먼트는 100KB 미만의 증가를 보여줍니다. 그러나 VM Tracker의 내 더티 크기, 상주 크기 및 가상 크기는 내 앱 상태를 변경할 때마다 상당히 (지속적으로 약 11MB 씩) 늘어나고 있습니다. 원래 게시물에서 말했듯이 내가 릴리스하는 모든 사용자 지정 개체는 할당이 해제됩니다. – Jacob

+0

아, 메모리 부족 경고도 표시되지 않습니다. – Jacob

+0

시뮬레이터 또는 실제 장치에 대해 실행 중이십니까? – rcw3

2

NSZombieEnabled를 사용할 수 있습니까? 한 번 나에게 일어났습니다 ...

+0

NSZombieEnabled가 NO로 설정됩니다. – Jacob

0

WWDC 2011 세션 318 비디오 "iOS Performance in Depth"(약 43 분 50 초)는 UIImageView의 UIImage (s)에서 애니메이션을 많이 사용하여 메모리를 많이 사용하는 방법을 설명합니다. 그들은

- (void) animateImages 
{ 
    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateImage:)]; 
} 

- (void) animateImage:(CADisplayLink *)link 
{ 
    [imageView setImage:[UIImage imageWithContentsOfFile:nextImagePath()]]; 
} 

속도가 보장되지 애니메이션 사용하여 큰 이미지를 애니메이션 할 때 좋습니다. + [UIImage imageNamed :]가 이미지 인스턴스를 캐시하기 때문에 + [UIImage imageWithContentsOfFile :]을 사용하는 것이 중요합니다.

저는 큰 이미지 애니메이션 세트간에 메모리가 부족한 상태로 계속 유지되는이 기술을 iPhone 3GS 및 iPhone 4S에서 원활하게 작동하고 있습니다. iPhone 3GS에서는 속도가 느리지 만 3GS에서는 이전에 한 세트의 애니메이션을 재생할 수 없었습니다. VM Tracker의 Dirty Size 통계를 보면 그 차이가 극적입니다.

관련 문제