2012-01-30 5 views
3

안녕하세요.이 모듈이 골칫거리 인 것으로 나타났습니다. Photolibrary에서 100 개 이상의 이미지를 가져 와서 다른 이름으로 문서 디렉토리에 저장합니다. 예상했던대로 나는 이상한 곳에서 기억에 문제가 있었다. 그것은 UIImagePNGRepresenation 캐싱 파일 것 같습니다. 그래서 300 + 이미지에 대해 아래의 프로세스를 실행하면 3.00GB의 범위에서 "전체 바이트"가 표시되고 메모리 (할당 도구에서 테스트 됨)로 인해 충돌이 발생합니다. 아래 코드를 붙여 넣었습니다. 캐싱은 [UIImage imageNamed:]하지 UIImagePNGRepresentation()에서 오는이 코드UIImagePNGRepresentation을 사용할 때 메모리 문제가 발생했습니다.

-(void)something 
{ 
    NSData *data=nil; 
    for (int i=0; i<numberOfImages; i++) { 

    @autoreleasepool { 

     UIImage *image=[UIImage imageNamed:[NSString stringWithFormat:@"image%d.png",i]]; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

     NSString *documentsDirectory = [[paths objectAtIndex:0] stringByAppendingString:@"directoryname"]; 

     NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"image%d.png",i]]; 

     //convert image into .png format 
     data=UIImagePNGRepresentation(image); 
     [data writeToURL:[NSURL URLWithString:fullPath] atomically:NO]; 
     } 
    } 
    data=nil; 
} 

답변

1

나는 애플이 문제를 우편으로 발송하고 모든 할당 사이에 수면 사이클을 소개하는 나에게 물었다. 할당 전에 수면을 추가하십시오.

+2

각 이미지 사이에 1 초? 그게 잘 확장되지 않습니다 .. – JHollanti

+0

나는 이것을 시도했지만 도움이되지 않습니다. 제발 다른 방법으로 이것을 해결할 수 있습니다 ... 미리 감사드립니다. –

1

에 대한 어떤 대안이 있습니까. 대신이 작업을 수행합니다 :

NSString *imageName = [NSString stringWithFormat:@"image%d.png", i]; 
NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName]; 
UIImage *image = [UIImage imageWithContentsOfFile:imagePath]; 

... 
+0

아니요. 작동하지 않았습니다. 나는 [UIImage imageWithContentsOfFile :], [[UIImage alloc] initWithContentsOfFile :]로 시도했다. 문제는 UIImage를 NSData로 변환하는 중입니다. 나는 위의 약 15 번을 확인했습니다. – Dhilip

+0

어쨌든 이미지를 사용하지 않는 것처럼 보입니다. 그리고 그들은 처음부터 png를 시작합니다. 왜 그냥 복사하지 않으시겠습니까? '[NSFileManager copyItemAtPath : toPath : error :]' –

+0

훌륭한 아이디어 ..! 나는 지금 그걸 확인 할께. – Dhilip

2

3 채널 이미지 (RGB) 대신 4 채널 이미지 (RGBA 또는 RGBX)를 보내이 문제를 해결합니다.

이미지의 매개 변수를 변경할 수 있는지 확인할 수 있습니다.

관련 문제