亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

OC對象的歸檔及解檔淺析

2019-11-14 19:23:38
字體:
來源:轉載
供稿:網友

對象歸檔,就是把內存中對象持久化。

對象解檔,就是把持久化的對象讀取到內存。

oc中對象歸檔解檔大致分為以下幾種方法:

從數量上可以分為:

  1. 對單個對象歸檔解檔
  2. 對多個對象歸檔解檔

從對象的存在形式上可以分為:

  1. 系統對象歸檔解檔
  2. 自定義對象歸檔解檔

接下來逐一編寫代碼做簡單實現

1.單個系統對象歸檔及解檔:

void SingleSystemObject(){    NSArray *arr = [NSArray arrayWithObjects:@1,@"你好",@3, nil];        NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"array.txt"];    //對象歸檔    BOOL success = [NSKeyedArchiver archiveRootObject:arr toFile:filePath];    if (success) {        NSLog(@"歸檔成功");    }        //對象解檔    NSArray *arr2 = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];        for (NSString *str in arr2) {        NSLog(@"%@",str);    }}

2. 多個系統對象歸檔及解檔

void MultiSystemObject(){    NSArray *arr = [NSArray arrayWithObjects:@1,@2,@"中文", nil];    NSInteger integer = 10;    BOOL archiverBool = YES;            /*------對象歸檔--------------------*/    NSMutableData *data = [NSMutableData data];        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];        //對多個對象編碼歸檔,key是解檔時對象的標識符,可任意編寫    //encode有多個重載,但并不是任何系統對象都有重載方法    [archiver encodeObject:arr forKey:@"arr"];    [archiver encodeInteger:integer forKey:@"integer"];    [archiver encodeBool:archiverBool forKey:@"archiverBool"];    //完成編碼    [archiver finishEncoding];        NSString *filepath = [NSHomeDirectory() stringByAppendingPathComponent:@"1.txt"];        //將data以原子操作方式寫入文件    BOOL success = [data writeToFile:filepath atomically:YES];        if (success) {        NSLog(@"歸檔成功");    }    /*------對象歸檔--------------------*/        /*------對象解檔--------------------*/    //將文件數據加載入NSData對象    NSData *data2 = [NSData dataWithContentsOfFile:filepath];        //使用NSData對象初始化接檔器    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data2];        //根據歸檔時的類型和key解檔對應數據    NSArray *arr2 = [unarchiver decodeObjectForKey:@"arr"];    NSInteger integer2 = [unarchiver decodeIntegerForKey:@"integer"];    BOOL unarchiveBool = [unarchiver decodeBoolForKey:@"archiveBool"];        NSLog(@"%@",arr2);    NSLog(@"%ld",integer2);    NSLog(@"%d",unarchiveBool);    /*------對象接檔--------------------*/}

3.自定義對象歸檔及解檔

自定義對象實現可歸檔解檔,需遵守NSCoding協議,該協議下有兩個方法需要實現,分別是

歸檔編碼

- (void)encodeWithCoder:(NSCoder *)aCoder

歸檔解碼

- (id)initWithCoder:(NSCoder *)aDecoder

此兩個方法中實現自定義對象中自定義成員變量歸檔時的編碼和解碼方式,類似于多系統對象歸檔的實現方式,即將成員變量按類型編碼并制定key,解碼時根據key按類型解碼并賦值給成員變量,最終將對象返回。簡單代碼實現如下:

Person.m

@interface Person : NSObject <NSCoding>@PRoperty (copy,nonatomic)NSString *name;@property (assign,nonatomic)NSInteger age;@end@implementation Person- (void)encodeWithCoder:(NSCoder *)aCoder{    [aCoder encodeObject:self.name forKey:@"name"];    [aCoder encodeInteger:self.age forKey:@"age"];}- (id)initWithCoder:(NSCoder *)aDecoder{//    self = [super init];//    if (self) {        self.name = [aDecoder decodeObjectForKey:@"name"];        self.age = [aDecoder decodeIntegerForKey:@"age"];//    }    return self;}- (NSString *)description{    NSString *desc = [NSString stringWithFormat:@"name = %@,age = %ld",self.name,self.age];    return desc;}@end

 歸檔解檔代碼:

void UserDefinedObject(){    Person *p = [[Person alloc] init];    p.name = @"yangys";    p.age = 10;        //歸檔    NSString *filepath = [NSHomeDirectory() stringByAppendingPathComponent:@"person.txt"];        BOOL success = [NSKeyedArchiver archiveRootObject:p toFile:filepath];        if (success) {        NSLog(@"歸檔成功");    }        //解檔    Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:filepath];            NSLog(@"%@",person);}

自定義多個對象的歸檔及解檔如多個系統對象的歸檔及解檔。

這里值得一提的是,系統對象的歸檔及解檔中,只有遵守了NSCoding協議或其子協議的系統對象才可進行歸檔及解檔。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品中文字幕电影| 日韩视频―中文字幕| 亚洲国产精品成人精品| 亚洲国产古装精品网站| 岛国av一区二区在线在线观看| 国产亚洲视频中文字幕视频| 一本色道久久综合亚洲精品小说| 亚洲国产精品悠悠久久琪琪| 国产拍精品一二三| 亚洲网站在线看| 精品欧美一区二区三区| 日韩va亚洲va欧洲va国产| 91天堂在线观看| 国产成人在线亚洲欧美| 欧美另类老女人| 国产丝袜一区二区三区免费视频| 91免费的视频在线播放| 久久久999国产精品| 国产综合在线视频| 精品五月天久久| 中文字幕日韩高清| 中文字幕日韩有码| 亚洲免费成人av电影| 韩曰欧美视频免费观看| 国产欧美久久久久久| 国产精品极品美女在线观看免费| 粗暴蹂躏中文一区二区三区| 欧美人与性动交| 日韩久久午夜影院| 久久视频在线视频| 午夜精品久久久久久99热软件| 亚洲激情视频网| 久久久久久91| 久久九九国产精品怡红院| 欧美电影免费观看网站| 成人在线激情视频| 欧美性猛交xxxx免费看漫画| 日本一区二区在线播放| 欧美午夜精品久久久久久人妖| 51精品国产黑色丝袜高跟鞋| 91香蕉嫩草影院入口| 欧美激情免费观看| 亚洲国产高清自拍| 国产精品偷伦视频免费观看国产| 一区二区av在线| 亚洲资源在线看| 国产精品扒开腿做爽爽爽的视频| 日韩电影中文字幕av| 97色在线播放视频| 在线看福利67194| 97超视频免费观看| 日韩美女av在线| 在线不卡国产精品| 精品国模在线视频| 久久久在线免费观看| 国产精品国内视频| 亚洲日本欧美中文幕| 中文在线资源观看视频网站免费不卡| 亚洲永久在线观看| 日韩在线欧美在线国产在线| 国产日本欧美一区二区三区在线| 91精品国产99久久久久久| 日韩在线不卡视频| 亚洲成年人影院在线| 91亚洲精华国产精华| 久久久久久久久久久91| 奇米四色中文综合久久| 亚洲成色777777在线观看影院| 久久久精品中文字幕| 亚洲第一福利网站| 中文综合在线观看| 九九视频直播综合网| 51ⅴ精品国产91久久久久久| 69视频在线播放| 日韩精品高清视频| 亚洲xxxx妇黄裸体| 在线视频精品一| 日韩在线免费高清视频| 色婷婷av一区二区三区在线观看| 影音先锋日韩有码| 91久久久久久久| 不卡av电影在线观看| 亚洲欧洲激情在线| 欧美老少做受xxxx高潮| 国产日韩专区在线| 久久久免费在线观看| 国产精品国产福利国产秒拍| 97色在线视频观看| 国产精品久久久久久av下载红粉| 粉嫩av一区二区三区免费野| 欧美激情精品久久久久久蜜臀| 日韩成人av在线播放| 国产精品亚洲片夜色在线| 国产精品黄页免费高清在线观看| 91在线观看免费观看| 久久天天躁狠狠躁夜夜av| 成人免费网站在线看| 国产精品综合网站| 久久成年人免费电影| 91wwwcom在线观看| 91啪国产在线| 亚洲黄页网在线观看| 欧美国产精品日韩| 26uuu亚洲国产精品| 91亚洲精品一区| 日韩在线激情视频| 亚洲午夜未满十八勿入免费观看全集| 另类天堂视频在线观看| 久久久国产一区二区| 欧美日韩一区二区精品| 欧美午夜精品久久久久久久| 91日本在线观看| 欧美日韩成人网| 亚洲精品国产精品国自产观看浪潮| 高潮白浆女日韩av免费看| 久久中文字幕一区| 国产网站欧美日韩免费精品在线观看| 久久久久久久影视| 26uuu久久噜噜噜噜| 国产精品无码专区在线观看| 亚洲国产又黄又爽女人高潮的| 成人激情视频在线播放| 亚洲成人在线视频播放| 国产福利视频一区二区| 136fldh精品导航福利| 亚洲精品国精品久久99热一| 91亚洲精品久久久久久久久久久久| 久青草国产97香蕉在线视频| 欧美精品在线免费播放| 九九久久综合网站| 欧美黑人巨大精品一区二区| 国产精品午夜国产小视频| 亚洲成人精品久久久| 亚洲精品成人免费| 欧美一区在线直播| 91高清视频在线免费观看| 亚洲精品午夜精品| 亚洲日韩欧美视频| 亚洲第一区第二区| 国产精品久久久一区| 国产www精品| 国产精品久久久久91| 91在线观看免费网站| 欧美性生交大片免网| 狠狠躁天天躁日日躁欧美| 欧美多人爱爱视频网站| wwwwwwww亚洲| 亚洲加勒比久久88色综合| xxav国产精品美女主播| 日本精品久久久久久久| 日韩av在线免费看| 国产亚洲成av人片在线观看桃| 欧美精品成人91久久久久久久| 欧美超级乱淫片喷水| 久久99亚洲热视| 日韩av综合网| 精品久久香蕉国产线看观看gif| 欧美日韩中文在线观看| 国产一区二区三区丝袜| 91av在线播放视频| 91精品视频在线| 欧美一区二区色| 亚洲综合在线中文字幕| 青青草原成人在线视频|