App.net 사용자가 업로드 한 표지 이미지를 다운로드 중입니다. App.net에서는 이러한 표지 이미지의 너비가 최소 960 픽셀 이상이어야합니다. 나는 간단한 AFImageRequestOperation
으로 그들을 가져 오기 :이, 아니 메모리 스파이크를 작동하지왜 UIImages를 디스크에 저장하면 메모리 사용량이 증가합니까?
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:URL];
AFImageRequestOperation *imageRequestOperation = [AFImageRequestOperation imageRequestOperationWithRequest:urlRequest success:^(UIImage *image) {
if (completionHandler) {
completionHandler(image); // Load image into UI...
}
}];
[self.fetchQueue addOperation:imageRequestOperation];
.
인증 된 사용자의 이미지를 캐싱하여 사용자가 앱을 열 때마다 다운로드하지 않아도됩니다. 다운로드 한 이미지를 디스크에 저장하자 마자 큰 소리를냅니다. 예를 들어, 내 표지 이미지는 현재 3264 x 2448 픽셀입니다. 내 Mac에서 다운로드하면 약 1,3 MB가됩니다. 그러나 UIImagePNGRepresentation(image)
또는 TMCache의 setObject:forKey:
메서드를 사용하여 NSData 객체를 만들면 사용 된 메모리가 약 60,0MB로 증가합니다.
명확하게하기 위해,이 모두가 내가 파일을 디스크에 기록하고있어입니다 :
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSURL *fileURL = ... // URL of file in "/Application Support"
NSData *imageData = UIImagePNGRepresentation(imageToSave);
[imageData writeToURL:fileURL atomically:YES];
});
사람이 무슨 일이 일어나고 있는지 말해 줄래? 1,3 MB가 거의 60 배로 추정되는 이유는 무엇입니까? 이 거대하고 잠재적으로 심각한 인플레이션을 피하려면 어떻게해야합니까? 이것은 하나의 이미지입니다. 사용자가 여러 프로필을 열고 캐시 된 이미지가있는 경우에는 어떻게됩니까?
매우 도움이됩니다. 감사합니다. 내가 이상한 것을 발견하는 것은 UIImage가 NSData로 변환하는 것만 큼 많은 메모리를 차지하지 않는다는 것입니다. 귀하의 정보를 사용하고 작은 이미지를 다운로드하고 캐시하십시오. 사람들이 이미지를 탭하면 UIImage 형식으로 모든 것을 다운로드합니다. 모든 데이터는 뷰 컨트롤러가 파괴 될 때 해제되고 얼마 후에는 어쨌든 사라집니다. NSData 객체를 저장하는 백그라운드 스레드가 NSData 객체를 유지할 수 있습니까? 나는 @autoreleasepool을 시도했지만 효과가없는 것처럼 보였다. –
나는 당신이보고있는 것이 지연된 로딩/디코딩이 iOS가 이미지들로하는 것이라고 생각한다. 이미지를 다운로드하고 imageWithContentsOfFile :을 사용하여 UIImage를 만들면 아무 것도 디코딩되지 않습니다 (아직). UIImageView에 이미지를 그리거나 설정하면 메모리 사용이 증가합니다. 데이터 표현을 얻는 것이 비슷한 것처럼 보입니다. 여러 프로필을 보는 사용자와 언급 한 시나리오를 시도해보십시오. 시간이 지남에 따라 어떤 종류의 메모리 사용이 표시됩니까? – azsromej