2013-05-10 5 views
0

일부 4k 이미지를 다운로드하려면 배경 스레드에서 NSData -initWithContentsOfURL을 사용합니다. 내 CFData (상점) 성장 유지하고 임 내가 this question배경 데이터 스레드에서 NSData -initWithContentsOfURL을 통해 이미지를 다운로드 할 때 CFData (저장소)가 최대 200MB까지 증가합니다.

에있는 캐시

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 
[sharedCache removeAllCachedResponses]; 
[sharedCache release]; 

을 취소 한이 코드를 사용하지만 (BTW 나는 충돌 지점되는) 200메가바이트 개까지 간다 악기에서 볼 수 나는 확실히 (내가 댓글을 달았 메모리가 50메가바이트 이상 성장하지 않았다)이 문제를 일으키는 알고 코드의 일부는 다음과 같습니다

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 

NSError *error = nil; 
NSString *serverPath = [serverImageInfo valueForKey:@"ImagePath"]; 
NSData *image = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[serverPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] options:NSDataReadingUncached error:&error]; 

NSString *directoryPath = [Utilities directorypath]; 
if (image != NULL && [image length] > 0) 
{ 
    //NSString *path = [[NSString alloc] initWithString:directoryPath]; 

    NSString *path = [directoryPath stringByAppendingPathComponent:@"ArrangementImages"]; 

    if (![[NSFileManager defaultManager] fileExistsAtPath:path]) 
    { 
     [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil]; 
    } 

    path = [path stringByAppendingPathComponent:imageInfo.Name]; 
    [image writeToFile:path atomically:YES]; 
    self.imageInfo.ImagePath = path; 
    [path release]; 
} 

[sharedCache removeAllCachedResponses]; 
[sharedCache release]; 

//image = nil; 
[image release]; 
+0

왜 그 부분을 제거하지 않는 것이 좋을까요? 나는 완전히 URL 캐시가 어쨌든 (NSURL 객체가 아닌 NSURL 객체와 함께 사용되는) 코드와 관련이 있다고 확신한다. – borrrden

+0

그 부분을 제거하면 어떻게 이미지를 다운로드 할 수 있는가 ??? –

+0

@borrrden initWithContentsOfURL을 NSURLRequest -sendSynchronousRequest로 바 꾸었습니다 ..... 메모리가 변경되지 않았습니다 ... 할당은 cfdata (저장소)에있는 모든 객체를 여전히 살아있는 객체로 표시하고 이미지가 다운로드되면 계속 커집니다. –

답변

2

난 그냥 사용 [sharedCache removeAllCachedResponses] autorelease 풀과 함께 .... 그리고 내 cfdata (store)는 4KB 이미지를 다운로드했지만 15MB 이상으로 증가하지 않았습니다.

+0

캐쉬 메모리의 크기가 무엇인지 어떻게 알 수 있습니까? "15 MB 이상 증가하지 못했습니다"라고 말하면 –

+1

계측기를 사용하여 ..... 할당 확인 ... 메모리 소비량을 알려줍니다. –