2011-01-04 2 views
0

을 해제하는 적절한 방법 두 가지 질문이 있습니다악기에 대해 질문을하고 내 코드에 문제를 발견 한 후 UIImageView에

1 : 내가 필요 정확히 할당 악기의 쇼 위의 코드는 (할당 된 메모리가 적은 이유 30MB보다 많음)

NSMutableArray* arrayOfImages = [[NSMutableArray alloc]initWithCapacity:30]; 
for (int i = 0; i <= 30; i++){ 
    NSString* path = [[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"picture%d",i] ofType:@"png"]; 
    UIImage* img = [[UIImage alloc]initWithContentsOfFile:path]; 
    [arrayOfImages addObject:img]; 
    [img release]; 
} 
imageView.animationImages = arrayOfImages; 
[arrayOfImages release]; 
.... 
imageView.animationImages = nil; 
[imageView release]; 

사실, 할당 된 메모리가 더 많습니다.

개발자 설명서 (메모리 관리)에 따르면 모든 것이 정확하다고 가정하지만 장치 프로그램에서는 일반적으로 메모리 부족으로 인해 충돌이 발생합니다. 물론, 이것은 전체 코드 아니지만, 문제는 definetely 여기에있다. (응용 프로그램에서이 애니메이션 5 UIImageViews은 그들 모두가 너무 많은 메모리를 사용합니다.)

편집 그래, 그것으로 어떻게 든 가능하다 그러한 문제를 해결하십시오. UIImages를 사용하여 메모리 문제가 있습니까?

+0

방금 ​​너무 많은 메모리를 할당 할 수 있습니까? 이미지는 많은 메모리를 차지합니다 ... 이미지의 크기가 얼마나 큽니까? – donkim

+0

320x480 Png. 배경은 투명하며 내부의 실제 이미지 크기는 약 150x150입니다. 각 이미지는 약 8 바이트입니다. 예, 나는 [UIImage imageNamed :]와 비슷한 문제를 겪었습니다. 전혀 공개하지 않았고 심지어 AllocationsInstrument가 – 0xDE4E15B

+0

을 보여주었습니다.이 두 이미지가 없다면 전혀 응용 프로그램을 시작할 수 없었습니다. 문제는 없습니다 ( – 0xDE4E15B

답변

1

귀하의 for {} 기능에서 NSAutoreleasePool을 시도해 볼 수 있습니다. 나는 거대한 86000 크기의 객체 배열을 만들어 동일한 메모리 문제를 겪었다. 나는 왜 때때로 그것이 풀리지 않는지 모르겠다.

+0

autoreleased 오브젝트와 마찬가지로, 나중에 * somewhen * 릴리즈됩니다 ... 현재 "runloop iteration"에서 많은 일을한다면 꽤 빨리 합쳐집니다. 전용 풀은이를위한 지름길입니다. 그러나 어쨌든 여기에 이미지가 필요하기 때문에 (눈에 잘 띄어 야 함) 큰 차이가 없어야합니다. – Eiko

+0

약 2 달 전에 비슷한 질문을했고 이전 질문에도 그러한 조언이있었습니다. – 0xDE4E15B

+0

하지만 그는 [img release]라고 부릅니다. 나는 똑같이했다. 나는 물건들을 풀어 놓았지 만 그들은 여전히 ​​계기판에 보이는 것처럼 존재했다. –

1

메모리 관리가 여기에서 좋아 보인다.

배열 할당에 코드가 제안한대로 30 개가 아닌 0 ~ 30 개의 이미지가 있는지 확인하십시오.

크기가 31 인 이미지는 320 * 480 * 4 * 31 = 19046400 바이트로 약 18MB가 필요합니다.

편집 : 5 명이 있다면, 우리는 아마도 80MB 이상을 말할 것입니다!

+0

입니다. 예, 플러스 비디오 및 응용 프로그램이 충돌합니다. AutoReleasePools를 사용하려고합니다 – 0xDE4E15B

+0

그는 배경 이미지 만 320x480이고 나머지는 150x150이라고 말하지 않았습니까? 각 이미지의 크기가 8 바이트 ? –

+1

당신이 이미지의 파일 크기에 의해 잘못 생각한 것 같습니다. 이것은로드 될 때의 모습이 아닙니다 * 하나의 이미지는 600kB를 소비합니다 – Eiko

0

31 개의 NSImage를 생성 중입니다. 번들에 picture0.png 또는 picture30.png가 없으면 문제가있을 수 있습니다.

문제가 해결되는지 i + = 5 또는 i + = 10으로 시도하십시오.

관련 문제