iOS 데이터 영구화 대상의 압축 및 해제
NSCoding
와 NSCopying
협의도 있다. 표량( int float)
과 대다수Foundation
와 Cocoa Touch
류가 모두 NSCoding
협의를 따르기 때문에 (예외가 있다. 예를 들어 UIImage가 따르지 않는 경우) 대부분의 종류는 비교적 쉽게 압축 파일 조작을 실현할 수 있다.1.
NSCoding
협의에 따라 NSCopying
협의NSCoding
협의에 따라 두 가지 방법을 성명했다.하나는 대상을 압축 파일에 인코딩하는 것이고, 다른 하나는 압축 파일에 대한 디코딩으로 우리가 이전에 압축한 대상을 복원하는 것이다. 사용 방법은 NSUserDefaults
와 비슷하며, KVC로 대상과 원본 데이터 형식( int float)
을 인코딩하고 디코딩할 수 있다.NSCopying
프로토콜은 부치 대상을 허용하는 데 사용되며 데이터 모델 대상을 사용할 때 비교적 유연성을 가진다.2, 아카이브\압축 해제 아카이브: 객체를
NSKeyedArchiver
인스턴스에 아카이브하는 데 사용되는 NSMutableData
인스턴스를 만듭니다. 이때 NSMutableData
는 인코딩된 데이터를 포함하고 키/코드를 사용하여 필요한 대상을 압축하고 마지막으로 완성을 알리며 파일 시스템에 기록합니다.압축 파일 해제: 압축 파일 대상의 절차와 비슷합니다. 데이터를 불러오는 데 사용할
NSData
실례를 만들고 NSKeyedUnarchiver
실례를 만들어서 데이터를 디코딩한 다음 이전 키로 읽기 대상을 만듭니다.마지막으로 프로그램 해제 완료를 알립니다.a. "linePesist"클래스 생성
Xcode에서 Persistence2라는 이름의 새 프로젝트를 Single View Application 템플릿으로 만듭니다.그러나 새 파일을 만들거나command+N을 누르거나 File 메뉴에서 New->New File을 순서대로 선택해야 합니다.새 파일 마법사가 나타나면 Cocoa Touch를 선택하고 Objective-C class를 선택하고Next를 누르면 클래스를'line Pesist'로 명명하고'Subclass of'표시줄에서 NSObject를 선택하고 Next를 누르고 Create를 누르십시오.이 클래스는 우리의 데이터 모델로 사용되며 속성 목록에 적용되는 사전의 데이터를 저장하는 데 사용됩니다.다음과 같이 코드를 수정하려면 "linePesist.h"를 클릭합니다.
#import
// NSCoding、NSCopying
@interface linePesist : NSObject
@property (nonatomic,copy)NSArray *array;
@end
이것은 텍스트 상자의 데이터 필드에 사용할 수 있는 그룹 형식을 가진 간단한 데이터 모델입니다.다음은 "linePesist.m"편집입니다.
#import "linePesist.h"
#define CodeStr @"CodeStr"
//
@implementation linePesist
/* NSCoding NSCoping , 。*/
#pragma mark -- Coding
//
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.array forKey:CodeStr];
}
//
-(id)initWithCoder:(NSCoder *)aDecoder{
self = [super init];
if(self) { self.array = [aDecoder decodeObjectForKey:CodeStr];
}
return self;
}
#pragma mark -- Coping
-(id)copyWithZone:(NSZone *)zone{
linePesist *copy = [[[self class]allocWithZone:zone] init];
NSMutableArray *muAr = [[NSMutableArray alloc]init];
for(id line in self.array) {
[muAr addObject:[line copyWithZone:zone]];
}
copy.array = muAr; return copy;
}
@end
미리 정의된'CodeStr'를 인코딩 키로 하고 4개의 텍스트 상자의 문자열을 저장한 다음에 같은'CodeStr'키로 디코딩하여 4개의 문자열을copyWithZone이 만든linePesist 대상에 복사한다.
b. ViewController 클래스 구현
아카이빙할 수 있는 데이터 객체를 만든 후에는 이를 사용하여 영구적인 스토리지를 구축할 수 있습니다."ViewController.m"편집 인터페이스를 클릭하고 다음 삭제된 부분의 코드 편집을 진행합니다
#import "ViewController.h"
#import "linePesist.h"
//
#define CodeString @"CodeString"
@implementation ViewController
-(NSString *)dataFile{
NSArray *ar = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString *fielpath = [ar objectAtIndex:0];
return [fielpath stringByAppendingPathComponent:@"data.archive"];
// , , 。 。。archive
}
- (void)viewDidLoad {
[super viewDidLoad];
NSString *filepath = [self dataFile];
NSLog(@"%@",filepath);
if([[NSFileManager defaultManager]fileExistsAtPath:filepath]) {
// 2
NSData *data = [[NSData alloc]initWithContentsOfFile:filepath]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
// 。 linepesist
linePesist *linepesist =[unarchiver decodeObjectForKey:CodeString]; [unarchiver finishDecoding];
//
자, 속성 목록, 압축 파일 해제 대상의 저장 방법은 우리가 여기까지 소개했는데 독자들은 어떤 차이가 있는지 비교해 볼 수 있다. 으.. 가장 뚜렷한 것은 압축 파일의 코드량이 많을 것이다. 그러나 그에 상응하여 압축 파일은 매우 좋은 신축성을 가지게 될 것이다. 적어도 코드에서 보면 이렇다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.