* 파일 처리

  - 아이폰에서 참조하게 되는 폴더들 : Application – Documents, Library, tmp, Caches, Preferences, Application.app

  - 위의 폴더들이 존재하지만 그 중 Documents 폴더만 우리가 사용할 수 있다

  - app는 번들 디렉토리이다. 실행 중에는 이 폴더의 내용을 변경할 수 없다

  - Library 폴더 안에는 다시 Caches와 Preference 폴더가 존재하며 Preference 폴더 안에 NSUserDefaults가 생성하는 .plist 파일이 존재한다

  - Preference는 ITunes에 의해 백업된다

  - Caches는 애플리케이션에 의존적이어야 하는 파일을 저장

  - tmp는 지속적으로 저장되지 않아도 되는 파일을 저장


* 특별한 용도의 파일

  - Default.png 파일은 애플리케이션이 로드될 때 자동으로 호출되는 그림 파일이다

  - 최상위 폴더에 넣어두면 자동으로 호출되어 출력된다 (주로 로딩시에 로고를 보여주는 용도로 사용됨)

  - 이 파일은 320x480 사이즈를 권장한다

  - ~~~info.plist 파일 역시 번들 정보를 저장하고 있는 특별 용도의 파일이다

  - 이 2개의 파일은 위치와 이름이 반드시 정해진 대로 되어 있어야 하며 바꿀 수 없다


* 파일에 읽기/쓰기

  - Documents 폴더의 경로 얻기
NSArray * 배열명 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *경로명 = [배열명 objectAtIndex:0];

  - 현재 프로젝트의 번들 경로 얻기
[[NSBundle mainBundle]bundlePath];

  - NSString, NSDictionary, NSData, NSArray, NSDate의 파일로부터 읽기와 쓰기
파일로부터 읽기
-(id)initWithContentsOfFile:(NSString *)path;
URL로 부터 읽기
-(id)initWithContentsOfURL:(NSURL*)url;
파일에 쓰기
-(BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag;
URL에 쓰기
-(BOOL)writeToFile:(NSURL *)url atomically:(BOOL)flag;


* 아카이브

  - 프로그램에서 사용되는 Object를 속성 값이나 관계를 포함에서 파일에 바이트 배열로 저장해 두는 것을 archive라고 한다

  - Object를 바이트 배열로 저장하는 것을 archive라고 하고 반대되는 작업을 unarchive라고 한 다

  - 객체를 archive하기 위해서는 NSCoding이라는 프로토콜을 따라야 한다 . 이 규칙을 따르게 되면 archive가 가능하고 NSString이나 NSDictionary 등은 이 프로토콜을 이미 적용해 두고 있다

  - NSArray나 NSDictionary 또는 NSData 등의 자료구조들은 description 메서드를 호출하면 데이터들을 propertyList로 만들어서 출력해준다. 이 때 문자열은 “”로 묶어주며 영문자와 숫자로만 구성된 경우 “”를 생략해도 된다

  - 데이터는 < >로 16진수로 묶어서 표현하게 된다

  - 저장되는 구조는 description을 확인하면 되고 파일에 저장되어 있는 경우에 읽어 올 수도 있다. 이 때 이 파일들은 XML 구조로 저장되며 수정이 불가능한 객체로 리턴되므로 주의해야 한 다


* 일반 클래스 아카이브

  - 일반 오브젝트를 아카이브 할 때는 NSCoding 프로토콜에 정의되어 있는 encodeWithCoder:와 initWithCoder: 메서드를 정의하면 된다

  - 메서드의 원형
-(void)encodeWithCoder:(NSCoder *)encoder
이 메서드의 안에서 encoder가 아카이브 할 실제 멤버들을 직접 인코딩하면 된다
-(id) initWithCoder:(NSCoder *)decoder
이 메서드의 안에서 decoder가 언아카이브 할 실제 멤버들을 직접 디코딩하면 된다

  - 기본 데이터 타입에 대한 인코드와 디코드 메서드
encodeBool:forKey   decodeBool:forKey
encodeInt:forKey  decodeInt:forKey
encodeInt32:forKey decodeInt32:forKey
encodeInt64:forKey decodeInt64:forKey
encodeFloat:forKey decodeFloat:forKey
encodeDouble:forKey decodeDouble:forKey


+ Recent posts