Objective-C日記-之編碼對象屬性

來源:互聯網
上載者:User

標籤:

NSCoder類1,概述

將對象的執行個體變數和其他資料編碼為資料區塊,然後將他們存在到磁碟當中;以後將這些資料區塊讀回到記憶體中,並且還基於儲存的資料建立新的對象,也稱序列化或還原序列化。

2,用法

a,首先,定義一個類,使其遵守<NSCoding>協議

@interface Thingie:NSObject <NSCoding>{

  NSString *name;

  int magicNumber;

  float shoeSize;

  NSMutableArray *subThingies;

}

@property (copy) NSString *name;

@property int magicNumber;

@property float shoeSize;

@property (retain) NSMutableArray *subThingies;

-(id)initWithName:(NSString *)n

      magicNumber:(int)mn

             shoeSize:(float)ss;

@end//interface Thingie

實作類別

@implementation Thingie

@synthesize name;

@synthesize magicNumber;

@synthesize shoeSize;

@synthesize subThingies;

-(id)initWithName:(NSString *)n

      magicNumber:(int)mn

             shoeSize:(float)ss{

if(self==[super init]){

self.name=n;

self.magicNumber=mn;

self.shoeSize=ss;

self.subThingies=[NSMutableArray array];

}

return self;

}

實現<NSCoding>協議中的-encoderWithCoder和-initWithCoder

接以上代碼

-(void)encoderWithCoder:(NSCoder*)coder{

[coder encodeObject:name

                    forKey:@"name"];

[coder encodeObject:magicNumber

                     forKey:@"magicNumber"];

[coder encodeObject:shoeSize

                    forKey:@"shoeSize"];

[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.shoeSize=[decoder decodeFloatForKey:@"shoeSize"];

self.subThingies=[decoder decodeObjectForKey:@"subThingies"];

}

return self;

}//initWithCoder

b,再次,使用該類定義一個對象,初始化它。

Thingie *thing1;

thing1=[[Thingie alloc]

initWithName:@"thing1"

magicNumber:42

       shoeSize:10.5];

c,定義一個NSData對象,並使用類方法:NSKeydArchiver對對象進行編碼後賦值給NSData對象。

NSData *freezeDried;

freezeDried=[NSKeyedArchiver archivedDataWithRootObject:thing1];

d,如果願意,可以將NSDataObject Storage Service到磁碟上

[freezeDried writeToFile:@"/tmp/verbiage.txt"

                   atomically:YES];

f,解碼NSData

thing1=[NSKeyedUnarchiver unarchiverObjectWithData:freezeDried];

3,注意點

如上所樣本中,NSMultableArray對象subThingies可以存放各種對象,但是不能儲存NSlog類,因為它不能檢測對象迴圈。

Objective-C日記-之編碼對象屬性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.