Wireframe

프로퍼티 리스트 타입

프로퍼티 리스트는 코코아의 표준 데이터 타입 클래스들을 직렬화/역직렬화하는데 사용되는 구조화된 데이터 포맷이다. 프로퍼티 리스트는 .plist 라는 확장자의 파일로 기록되어 코코아 앱에서 광범위하게 쓰인다. 특히 모든 코코아/코코아터치 앱의 번들에는 기본적으로 Info.plist라는 파일이 있고, 이 파일은 앱의 기본적인 론칭에 필요한 필수적인 정보들(메인 nib파일 및 스토리보드 경로등)이 지정되어 있다.
프로퍼티 리스트는 구조화된 트리이며, 파일로 저장될 때에는 XML의 형식이나 바이너리 파일로 저장될 수 있다. 인터페이스 빌더에서 작성한 UI 구성 정보는 모두 프로퍼티 리스트로 만들어진다. 이 정보는 XML 형식을 써서 .xib 포맷으로 기록되었다가, 프로젝트를 빌드하는 시점에 컴파일되어 .nib파일로 변환된다.
프로퍼티 리스트 타입이란, 프로퍼티 리스트에 “들어갈 수 있는” 데이터 타입을 말한다. 보통 클립보드에 복사하기 위한 pasteboardPropertyList(ofType:)의 리턴값들은 프로퍼티 리스트에 들어갈 수 있는 다음의 타입중 하나여야 한다.

추상타입 XML 요소 코코아 클래스
array <array> NSArray
dictionary <dictionary> NSDictionary
string <string> NSString
data <data> NSData
date <date> NSDate
integer <integer> NSNumber
floating <real> NSNumber
Boolean <true/> , <false/> NSNumber

프로퍼티 리스트 타입에 속하는 클래스들은 보통 프로퍼티 리스트로부터 바로 객체화될 수 있고, 프로퍼티 리스트로는 별다른 변환없이 그대로 넘겨져서 시스템에 의해 자동으로 직렬화된다. 예를 들어서 NSArray<NSString *> * 타입의 배열이 있다면 이 배열의 전체 그래프는 하나의 프로퍼티 리스트 객체인 셈이다. 이 데이터를 만약 어딘가 저장하거나 할 때에는 여러 방법을 사용할 수 있다.

  1. 이들 클래스는 모두 NSCoding을 따르기 때문에 NSKeyedArchiver를 사용해서 이진 데이털 직렬화할 수 있고, 이 데이터를 그대로 기록할 수 있다.
  2. 프로퍼티 리스트 타입을 위한 NSPropertyListSerialization 클래스가 있다. +dataWithPropertyList:format:options:error:을 사용하여 직렬화할 수 있다.
  3. 위의 말은 곧 NSArray는 곧바로 파일에 기록될 수 있다는 것을 의미한다. 모든 프로퍼티 리스트 타입의 객체들은 -writeToURL:atomically:를 쓸 수 있다. (단, 이 메소드는 Xcode9 기준으로 deprecated되었다.)

3번을 생각한다면 프로퍼티 리스트 XML 요소를 사용해서 잘 포맷팅된 XML 파일이 있다면, 이로부터 NSArray, NSDictionary를 바로 읽어들이는 것도 가능하다는 이야기이다. (-initWithContentsOfURL:이 있다.)
다만 현재 Xcode 9 버전을 기준으로 NSArray, NSDictionary를 다른 클래스 도움 없이 파일에 쓰고, 읽는 메소드들은 deprecated된 상태이다. (물론 다른 대안들이 존재하긴 하지만) 이렇게 간편한 방법에 대한 새로운 API가 아직까지는 정식으로 공개되지는 않은 상태이다.
 

Exit mobile version