2010-11-26 5 views
6

iOS 문서는 "직렬화"와 "보관"을 구분합니다. 이것은 일반적인 구별 (즉, 다른 언어로 보류)입니까, 아니면 Objective-C에만 해당합니까? 또한이 둘의 차이점은 무엇입니까?직렬화 대 보관 중입니까?

+0

@ skaffman, 나는이 태그가 추가 된 iOS가 정확하지 않기 때문에 다른 언어에서 답변을 얻을 수있었습니다. –

+0

GG skaffman. GG. – Mark

+1

iOS에만 국한되지 않습니다. NSKeyedArchiver는 Mac OS X에서도 사용 가능합니다. –

답변

5

이것은 하나의 시간대의 일부입니다 (그러나 전부는 아님).

위키이 직렬화에 대해 말하고 있습니다

"직렬화는이 파일 또는 메모리 버퍼에 저장하거나 통해 전송 될 수 있도록 비트 시퀀스로 데이터 구조 또는 객체를 변환하는 프로세스 네트워크 연결 링크가 나중에 동일한 또는 다른 컴퓨터 환경에서 "부활"될 수 있습니다.

따라서 만 보관할 수 있습니다. 예를 들어 직렬화와 압축의 조합 일 수도 있습니다. 아니면 어떤 종류의 헤더 정보를 추가합니다. 따라서 직렬화는 아카이브의 한 형태이지만 아카이브는 반드시 직렬화가되는 것은 아닙니다.

이것은 iOS에만 국한되지 않습니다. 이러한 용어는 전 세계에 던져져 있습니다. 하지만 iOS 환경에서의 구체적인 의미는 매우 구체적 일 수 있습니다.

+0

좋은 답변 +1. 나는 사실 모든 것을 거꾸로 가지고있었습니다. –

1

일반적으로 직렬화는 프로그램 데이터 형식을 아키텍처 독립적 인 바이트 스트림으로 변환하는 것과 관련이 있습니다. 보관은 형식화 및 기타 관계 기반 정보를 저장할 수있는 특수 직렬화로 쉽게 직렬화 해제/정리 해제 할 수 있습니다. 따라서 보관은 직렬화의 전문화 및 하위 집합으로 생각할 수 있습니다. 오브젝티브 C 들어

로 직렬화하고 아키텍쳐 독립적 바이트 스트림에서 오브젝티브 C에게 유형을 변환한다. 아카이브와 달리 기본 직렬화는 데이터의 유형을 기록하지 않으며 그 사이에 관계도 기록하지 않습니다. 값만이 기록됩니다. 데이터를 올바른 순서로 비 순차화할 책임은 입니다. 그러나 편의 클래스에서는 이 속성 목록을 serialize하고 그 값과 함께 구조를 기록하는 기능을 제공합니다. A와 C++ 데이터 구조의 임의의 세트의 가역 해체 을 의미하는 것으로 여기

http://www.boost.org/doc/libs/1_45_0/libs/serialization/doc/index.html

우리 용어 "시리얼" 사용 - C와

직렬화 부스트 ++ 바이트의 순서 이와 같은 시스템을 사용하면 다른 프로그램 컨텍스트에서 과 동일한 구조를 다시 구성 할 수 있습니다 ( ). 컨텍스트에 에 따라 개체 지속성 구현, 원격 매개 변수 전달 또는 기타 기능을 사용할 수 있습니다. 이 시스템에서 우리는 "아카이브"라는 용어를 사용하여이 바이트 스트림의 특정 렌더링을 나타냅니다. 이 라이브러리의 사용자가 이진 데이터 파일 텍스트 데이터, XML 또는 기타 을 만들 수 있습니다.

+0

+1. 이것은 나를 분리시키는 데 도움이된다. 나는 다른 언어들에 대한 더 많은 예제들을 기다리고있다. –

6

실제로 IOS의 관점에서 그 차이점을 찾으려고했습니다.

목적 :
보관는 저장소 개체 그래프에 사용되는 관심있는 사람들을 위해 다음과 같은 추가. 완벽한 데이터 모델을 쉽게 보관하고 복원 할 수 있습니다. Nib 파일이 작동하는 방식은 보관을위한 예제로 간주 될 수 있습니다.

연속화은 임의의 개체 계층 구조를 저장하는 데 사용됩니다.
와플 plist 파일 작업은 예제 직렬화로 간주 될 수 있습니다.

차이 (아카이브 프로그래밍 가이드로부터 발췌)
은 "보관은 그래프의 모든 객체의 ID 및 그 그래프의 모든 다른 물체 한 모든 관계를 보존한다."
rootObject 호출 컨텍스트 내에서 인코딩 된 모든 객체가 추적됩니다. 코더가 객체를 두 번 이상 인코딩하도록 요청되면 코더는 객체를 다시 인코딩하는 대신 첫 번째 인코딩에 대한 참조를 인코딩합니다.

"직렬화는 개체 값과 계층 구조에서의 위치 만 유지하므로 동일한 값 개체를 여러 번 참조하면 직렬화 될 때 여러 개체가 생성 될 수 있습니다. 개체의 변경 가능성은 유지되지 않습니다."

구현의 차이 :
있는 NSArray, NSDictionary와,있는 NSString,있는 NSDate,의 NSNumber하고있는 NSData (및 서브 클래스의 일부)의 같은 인스턴스 만 직렬화 할 수있는 NSCoding 프로토콜을 구현하는 모든 객체를 보관할 수 있습니다. 배열 및 사전 객체의 내용에는 이러한 몇 가지 클래스의 객체 만 포함되어야합니다.

이 때 사용하는 :
속성 목록 (직렬화)는 기본적으로 문자열과 숫자로 구성 데이터에 사용되어야한다. 이들은 큰 블록의 이진 데이터와 함께 사용될 때 매우 비효율적입니다.
plist 개체가 아닌 다른 개체를 보관하거나 큰 데이터 블록을 저장하는 것이 좋습니다.