앱의 NSUserDefaults
도메인이 XML 속성 목록으로 디스크에 기록됩니다. XML plist에 NSData가 포함되어 있으면 데이터는 16 진수 (가독성을 위해 일부 공백 추가)로 표시됩니다. 데이터의 각 바이트는 텍스트의 두 문자가되므로 50MB 데이터는 100MB가됩니다.
속성 목록은 임의 액세스 파일이 아닙니다. 사용자 (또는이 경우 Apple에서 구현 한 NSUserDefaults
)가 디스크의 속성 목록에서 값을 읽으려는 경우 전체 파일을 읽고 구문 분석하여 NSDictionary
. 변경 한 내용을 디스크에 저장하려면 전체 사전이 일련 화되고 파일에 기록됩니다. 따라서 읽기 및 구문 분석 또는 직렬화 및 쓰기 작업은 100MB 파일의 경우 1KB 파일보다 훨씬 오래 걸립니다. 이는 을 내부적으로 사용하기 때문에 Apple 프레임 워크의 어떤 코드가 -[NSUserDefaults synchronize]
으로 호출 될 때마다 발생하며 앱의 수명주기 동안 여러 번 발생할 수 있습니다.
이미 NSData가있는 경우 파일에 직접 입력하는 것이 어렵지 않습니다. 그게 -[NSData initWithContentsOfFile:]
및을위한 것입니다. (응용 프로그램의 docs 디렉토리에서 읽기/쓰기 경로를 얻는 데는 한 줄 또는 두 줄 밖에 없습니다. 예를 들어 Xcode 프로젝트 템플릿을 참조하십시오.)