@interface Student : NSObject<NSCoding> @property(nonatomic,copy)NSString * name; @property(nonatomic,copy)NSString * pwd; @end
進行序列化的方法為
-(void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:self.pwd forKey:@"pwd"]; }
進行反序列化的方法為:
-(id)initWithCoder:(NSCoder *)aDecoder { self= [super init]; if(self) { self.name=[aDecoder decodeObjectForKey:@"name"]; self.pwd=[aDecoder decodeObjectForKey:@"pwd"]; } return self; }
需要注意的是,我們在類的聲明文件中並不需要聲明這兩個文件,因為我們只在本類中使用這兩個方法,所以我們只需要在實現文件中實現這兩個方法就可以了。 值得注意的是歸檔操作在外面實現這個協議的兩個方法時就已經由系統實現,因此我們並不需要實現歸檔操作。我們需要的僅僅是將文件寫入到指定的文件中,以及將該文件讀取出來。我們可以理解為,我們在實現讀取和寫入的方法的過程中,實現了序列化和反序列化操作。進而實現了歸檔操作。寫入文件和讀取文件的代碼如下:
[NSKeyedArchiver archiveRootObject:stuArr toFile:@"/Users/Administrator/Desktop/4.plist"]; [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/Administrator/Desktop/4.plist"];
遍歷該文件所包含的對象即可得到文件中所包含的對象的所有屬性
for(Student * s in stuArr) { NSLog(@"%@,%@",s.name,s.pwd); }