내 응용 프로그램은 URL에서 특정 순서로 이미지를 다운로드하고 사용자가 이미지를 봅니다. 다음 이미지를 미리로드하고 이전 이미지를 캐시에 유지하는 앱이 있습니다.메모리가 올바르게 해제되지 않았습니까?
이 캐시는 기본적으로 이미지 ID와 연결된 키가있는 NSMutableDictionary입니다. 캐시의 각 객체는 url, 이미지 URL, 제목 및 NSData 객체가있는 NSDictionary입니다. 이미지를 다운로드 할 때 해당 요소가있는 캐시에 새 사전 개체를 추가합니다. 다음과 같이 NSData 객체를 저장합니다. NSData * imgData = [[NSData alloc] initWithContentsOfURL : [NSURL URLWithString : imageurl]]; 그런 다음이 객체를 자식 사전 객체에 추가합니다.
많은 수의 사진을 저장하고 캐시 한 후에 많은 양의 RAM을 차지하므로 분명히 전체 캐시를 지워 메모리 경고에 응답합니다. 문제는 내가 시도한 것이 든 아무런 RAM도 해제되지 않는다는 것입니다. 객체는 사라지지만 RAM을 돌려주지는 않습니다.
- 하위 사전에서 데이터 객체를 해제 한 다음 모든 항목이 반복되면 모든 캐시 사전 하위 객체를 제거합니다.
- , 캐시 사전을 통해 반복 자식 사전을 방출 완료되면 모든 개체를 제거
- (여전히 사용 할 필요가 있기 때문에, 그것을 다시 다음) 그렇다하더라도 전체 캐시 개체를 해제, 모든 개체를 제거
- 그리고 해제, 제거 등의 다른 무작위 조합.
문제는, 아무 것도 시도해 본 결과 RAM이 해제되지 않았습니다. NSData 객체의 메모리를 해제 할 때 잘못된 점이 있습니까?
데이터를 다운로드 할 때 사용하는 캐시 정책은 무엇입니까? 메모리가 누출되거나 버려 졌음을 확인 했습니까 (예 : 누수 또는 할당)? –
저는 실제로 iOS SDK에 내장 된 캐싱을 사용하고 있지 않습니다. NSData 객체로 채워진 NSDictionary로 내 자신을 관리하고 있습니다. 사전에서 모든 개체를 제거 할 때마다 메모리가 해제되지 않습니다. 이 메모리가 정확히 어디에 할당되었는지는 모르겠지만 원하는대로 해제되지는 않습니다. –