2013-03-25 6 views
1

잠재적으로 수백 개의 큰 파일이 들어있는 NSDocument 패키지를 만들므로 문서를 열 때이 파일을 모두 읽고 싶지는 않습니다.NSFileWrapper는 지연로드를 지원합니까?

나는 약간의 시간을 들여 검색했지만 definitve 대답을 찾을 수 없습니다. 대부분의 사람들은 NSFileWrapper이 모든 데이터를 메모리에로드한다고 생각하지만 일부는 랩퍼에서 -regularFileContents을 호출 할 때까지 데이터를로드하지 않는다고 표시합니다. (예제 Does NSFileWrapper load everything into memory?Objective-C/Cocoa: Uploading Images, Working Memory, And Storage를 참조하십시오.)

을 문서가 완전히 명확하지 않다, 그러나 NSFileWrapperReadingImmediateNSFileWrapperReadingWithoutMapping 같은 옵션은 항상 모든 것을 읽지 않습니다 제안하는 것.

을 나는 NSFileWrapper 증분 지원 수집 저장되어 교체 된 서브 랩퍼 만 기록합니다. 따라서 점진적 로딩을 지원한다면 좋을 것입니다.

확실한 답변이 있습니까? NSFileWrapperReadingImmediate 옵션을 지정하지 않으면

답변

1

NSFileWrapper이 지연되어 기본적으로로드됩니다. 실제로 뭔가를 요구할 때까지 파일을 메모리로 읽어 들이지 않습니다.

디버깅 지원에만, 당신은 검사하여, 파일이 아직로드되었는지 여부를 확인할 수 있습니다 : 파일을 디스크에서 읽을되면

[wrapper valueForKey:@"_contents"]; 

이 그것은 NSData로 채워집니다.

+1

감사합니다. 매우 유용합니다. 'NSFileWrapperReadingWithoutMapping'을 지정하면'-regularFileContents'가 파일을 캐싱하지 않고 읽을 수 있다고 생각하는 것이 맞습니까? 나는 그들이 메모리에 남아 있지 않고 plists의 무리에서 읽을 수 있기를 바랍니다. 캐시를 저장하고 더 이상 필요하지 않을 때 언로드/삭제할 수있는 방법이 있지만 더 좋은 방법은 없습니다. – Dejal

+0

아니요, 'NSFileWrapperReadingWithoutMapping'은 메모리 매핑을 사용해야하는지 여부를 제어합니다. 어느 쪽이든 파일을 덮을 NSData 객체는 –

+1

에 보관됩니다. 파일 래퍼를 할당 해제하지 않고 "언로드"하는 유일한 방법은 URL에서 다시 읽도록 요청하는 것입니다. 논란의 여지가 있지만 이것은 정상적인 환경에서 NSFileWrapper가 반 고정적으로 동작하도록 고의적 인 설계입니다. 일단로드되면 속성이 이전/알 수없는 상태로 되돌아 가지 않습니다. –