1、NSCoding初步學(xué)習(xí)

NSCcoding是一個(gè)協(xié)議,基本上所有的原生的類都是實(shí)現(xiàn)了NSCoding協(xié)議,在歸檔的過程中進(jìn)行了轉(zhuǎn)碼,所以才可以歸檔成功。

@protocol NSCoding

- (void)encodeWithCoder:(NSCoder *)aCoder;

- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder; // NS_DESIGNATED_INITIALIZER

@end

NSCcoding協(xié)議兩個(gè)必須實(shí)現(xiàn)的方法!

? 而且NSCoding多用于對(duì)自定義的類的實(shí)體對(duì)象進(jìn)行歸檔,比如寫一個(gè)student類

@interface Student : NSObject@property (nonatomic , retain) NSString *name;

@property (nonatomic , retain) NSString *ID;

-(Student *)initWithName : (NSString *)newName

and : (NSString *)newID;

@end

Student類需要實(shí)現(xiàn)協(xié)議NSCoding,.m文件中是這樣的:

@implementation Student

@synthesize name = _name,ID = _ID;

//初始化學(xué)生類

-(Student *)initWithName:(NSString *)newName and:(NSString *)newID{

self = [super init];

if (self) {

self.name = newName;

self.ID = newID;

}

return self;

}

//學(xué)生類內(nèi)部的兩個(gè)屬性變量分別轉(zhuǎn)碼

-(void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject:self.name forKey:@"name"];

[aCoder encodeObject:self.ID forKey:@"ID"];

}

//分別把兩個(gè)屬性變量根據(jù)關(guān)鍵字進(jìn)行逆轉(zhuǎn)碼,最后返回一個(gè)Student類的對(duì)象

-(id)initWithCoder:(NSCoder *)aDecoder{

if (self = [super init]) {

self.name = [aDecoder decodeObjectForKey:@"name"];

self.ID = [aDecoder decodeObjectForKey:@"ID"];

}

return self;

}

@end

自定義類Student實(shí)現(xiàn)了NSCoding協(xié)議以后,就可以進(jìn)行歸檔轉(zhuǎn)換了,具體實(shí)現(xiàn):

Student *stu1 = [[Student alloc]initWithName:@"124" and:@"111"];//學(xué)生對(duì)象stu1

Student *stu2 = [[Student alloc]initWithName:@"223" and:@"222"];//學(xué)生對(duì)象stu2

NSArray *stuArray = [NSArray arrayWithObjects:stu1,stu2, nil];//學(xué)生對(duì)象數(shù)組,里面包含stu1和stu2

NSData *stuData = [NSKeyedArchiver archivedDataWithRootObject:stuArray];//歸檔

NSLog(@"data = %@",stuData);

NSArray *stuArray2 = [NSKeyedUnarchiver unarchiveObjectWithData:stuData];//逆歸檔

NSLog(@"array2 = %@",stuArray2);

在IOS的開發(fā)中,小數(shù)據(jù)量的持久化都用NSUserDefaults來實(shí)現(xiàn),但是NSUserDefaults只能保存NSString, NSNumber, NSDate, NSArray, NSDictionary這些數(shù)據(jù)類型,但大多時(shí)候,我們會(huì)將一個(gè)對(duì)象實(shí)體做持久化的保存,由于不是大批量的數(shù)據(jù),不會(huì)用到sqlite,那么這個(gè)時(shí)候NSUserDefaults會(huì)是很好的選擇,其實(shí)對(duì)象類型可以通過NSCoding的委托方法來實(shí)現(xiàn)的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,058評(píng)論 0 9
  • 沙盒 Plist Preference偏好設(shè)置 NSKeyedArchiver歸檔 / NSKeyedUnarch...
    追風(fēng)者366閱讀 3,604評(píng)論 0 6
  • 本文結(jié)構(gòu) 參考孟巖老師的文章,對(duì)本文結(jié)構(gòu)如下劃分 基本數(shù)據(jù)類型基本語法數(shù)組和其他集合類基本輸入輸出和文件處理,輸入...
    不抄完整本三國不改名閱讀 627評(píng)論 0 1
  • 下面是我最近兩年學(xué)習(xí)OC中的一些基礎(chǔ)知識(shí),對(duì)于學(xué)習(xí)OC基礎(chǔ)知識(shí)的人可能有些幫助,拿出來分享一下,還是那句話不喜勿噴...
    小小趙紙農(nóng)閱讀 2,823評(píng)論 1 7
  • 一、歸檔介紹 1.歸檔是指用某種格式來保存一個(gè)或多個(gè)對(duì)象,以便以后還原這些對(duì)象的過程。歸檔是將數(shù)據(jù)持久化的一種方式...
    lilinjianshu閱讀 940評(píng)論 0 0

友情鏈接更多精彩內(nèi)容