Objective-C 기본 자습서 9

4192 단어
코코아는 두 가지 일반적인 파일 처리 클래스를 제공합니다: 속성 목록과 대상 인코딩입니다.
코코아에는 속성 목록이라는 대상이 있는데, 흔히 plist라고 간략하게 쓰인다.이 목록에는 코코아가 어떻게 작동하는지 아는 객체 세트가 포함되어 있습니다.구체적으로 코코아는 이를 파일에 저장하고 로드하는 방법을 알고 있습니다.속성 목록에는 NSArray, NSDictionary, NSString, NSNumber, NSData, NSDate 및 변형이 포함됩니다.
NSDate.날짜 및 시간을 처리하는 데 사용되는 Cocoa의 기본 클래스입니다.[NSDate date] 현재 날짜와 시간을 가져옵니다. 이 날짜는 자동으로 해제됩니다.
NSData.이 종류는 대량의 바이트를 포장했다.데이터의 길이와 바이트의 시작 위치를 가리키는 바늘을 얻을 수 있습니다.NSData는 일반적인 메모리 관리 동작에 적합한 개체이기 때문입니다.따라서 데이터 블록을 함수나 메소드에 전달하면 메모리 제거 문제를 걱정하지 않고 NSData를 자동으로 방출할 수 있습니다.
NSData 객체는 변경할 수 없습니다.그것들은 창설된 후에 바꿀 수 없다.이 데이터를 사용할 수 있지만 내용을 변경할 수 없고 NSMutable Data를 사용하여 데이터 내용에 바이트를 추가하고 삭제할 수 있습니다.
속성 목록
컬렉션 속성 목록 클래스(NSArray, NSDictionary)에는 속성 목록을 파일에 쓰기 위한 -writeToFile:atomically: 메서드가 있습니다.NSString과 NSData에도 writeToFile: atomically: 방법이 있지만 문자열이나 블록만 쓸 수 있습니다.따라서 문자열을 배열에 저장한 다음 배열을 저장할 수 있습니다.
NSArray *phrase;
phrase = [NSArray arrayWithObjects:@”I”,@”seem”,@”to”,@”be”,@”a”,@”verb”,nil];
[phrase writeToFiel:@”/tmp/verbiage.txt” atomically:YES];

지금 파일/tmp/veribiage를 보십시오.txt, 다음 코드가 보일 것입니다.
<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE plist PUBLIC “-//Apple/DTD PLIST 1.0//EN”
“http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=“1.0>
<array>
<string>I</string>
<string>seem</string>
<string>to</string>
<string>be</string>
<string>a</string>
<string>verb</string>
</array></plist>

현재 이미verbiage.txt 파일은 디스크에 저장되며 +arrayWithContent Offile: 방법으로 파일을 읽을 수 있습니다.코드는 다음과 같습니다.
NSArray *phrase2 = [NSArray arrayWithContentOfFile:@”/tmp/verbiage.txt”];
NSLog(@“%@”,phrase2);
writeToFile: 메서드의 atomically.이 매개 변수의 값은 BOOL 형식입니다. 코코아가 먼저 파일 내용을 임시 파일에 저장해야 하는지, 파일이 성공적으로 저장된 후에 임시 파일과 원시 파일을 교환해야 하는지 알려 줍니다.이것은 저장 과정에서 의외의 사고가 발생하면 원본 파일을 파괴하지 않는 안전 메커니즘이다.그러나 이런 안전 메커니즘은 일정한 코드를 지불해야 한다. 저장 과정에서 원본 파일이 디스크에 저장되어 있기 때문에 두 배의 디스크 공간을 사용해야 한다.저장된 파일이 매우 크지 않으면 사용자 하드디스크의 공간을 차지할 것입니다. 그렇지 않으면 자동으로 파일을 저장해야 합니다.
만약 데이터를 속성 목록 형식으로 간소화할 수 있다면, 이러한 매우 편리한 호출을 사용하여 내용을 나중에 읽을 수 있도록 디스크에 저장할 수 있다.만약 당신이 새로운 아이디어에 종사하거나 새로운 프로젝트를 설계하고 있다면, 이러한 편리한 방법으로 프로그램을 신속하게 작성하고 실행할 수 있다.디스크에 블록만 저장하고 객체가 필요하지 않아도 NSData를 사용하여 작업을 단순화할 수 있습니다.단지 데이터를 하나의 NSData 대상에 포장한 다음에 NSData 대상에서 writeToFile:atomically:를 호출하면 된다.
이 함수들의 단점은
오류 메시지는 반환되지 않습니다.파일을 불러올 수 없으면, 방법에서nil 포인터만 얻을 수 있고, 어떤 오류가 발생했는지 확인할 수 없습니다.
인코딩 대상
속성 목록 클래스의 대상이 아니라면 대응하는 방법으로 저장할 수 없습니다.다른 대상에 대해 코코아는 자바의 서열화와 반서열화와 유사한 다른 방법을 제공했다.구체적인 것은 NSCoding 프로토콜입니다. 다음은 간단한 예입니다.
@interface Thingie:NSObject <NSCoding>{
NSString *name;
int magicNumber;
NSMutableArray *subThingies;
}
@property (copy) NSString *name;
@property int magicNumber;
@property (retain) NSMutableArray *subThingies;
@end//Thingie
@implementation Thingie
@synthesize name;
@synthesize magicNumber;
@synthesize subThingies;

-(void) encodeWithCoder: (NScoder *) coder{
	[coder encodeObject : name forKey: @"name"];
	[coder encodeInt : magicNumber forKey: @"magicNumber"];
	[coder encodeObject : subThingies forKey: @"subThingies"];
}//encodeWithCoder

-(id) initWithCoder: (NSCoder *) decoder{
	if(self = [super init]){
		self.name = [decoder decodeObjectForKey: @"name"];
		self.magicNumber = [decoder decodeIntForKey: @"magicNumber"];
		self.subThingies = [decoder decodeObjectForKey: @"subThingies"];
	}
	return(self);
}

initWithCoder: 다른 init 방법과 마찬가지로 대상을 실행하기 전에 슈퍼클래스를 사용하여 초기화해야 합니다.이를 위해 부류에 따라 두 가지 방식을 채택할 수 있다.상위 클래스가 NSCoding 프로토콜을 사용하는 경우 [super initWithCode: decoder]를 호출해야 합니다.그렇지 않으면 [super init]만 호출하면 됩니다.
이상은 클래스 Thingie를 NSCoding 프로토콜로 실현했는데 이 클래스는 서열화와 반서열화를 할 수 있다.
Thingie thing1 = [[Thingie alloc] init];
NSData *freezeDried;
freezeDried = [NSKeyedArchiver archivedDataWithRootObject : thing1];// encodeWithCoder,NSData 。
[thing1 release];
thing1 = [NSKeyedUnarchiver unarchiveObjectWithData: freezeDried];// initWithCoder。

좋은 웹페이지 즐겨찾기