iOS的歸檔(archive)和解檔(unarchive)

在面向對象的編程中,會涉及到對象的保存,對象的保存在JAVA當中稱之爲serialize,也叫序列化。而在cocoa當中,這個過程稱之爲歸檔。cocoa當中最最典型的序列化例子就是NIB文件的保存和讀取過程。 編程

在cocoa當中如何實現了這個功能的哪? spa

其實在cocoa當中是經過了NSCoding協議和NSCoder抽象類共同實現的,對於NSCoder抽象類而言,其實他只是一個抽象類,是不能實例化使用的,而真正使用的是NSCoder的子類,即NSArchiverNSUnarchiverNSKeyedArchiverNSKeyedUnarchiver類的實例對象。 code

那麼實現的關鍵點有兩點: 對象

一、要使的須要存儲的對象實現NSCoding協議,從而使他本身知足寫二進制數據的能力。便是本身具備序列化的能力。 遞歸

二、使用NSCoder的子類方法,實現二進制數據的動做,如讀或者寫。即觸發存檔過程。 it

須要注意的一點就是說,其實對於序列化,是一個「一傳十,十傳百」的過程,父類的序列化,會逐層遞歸的將全部的子對象也進行了序列化。此外,序列化,可以序列化的是對象實例和類名,而對於方法實際上是沒法序列化的,所以對於序列化和非序列化的類,都須要使用共同的類定義,不然沒法還原。 序列化


NSCoding協議的方法: 二進制

-(id)initWithCoder:(NSCoder *)coder; // 讀取coder中的數據 方法

-(void) encodeWithCoder:(NSCoder*)coder;// 向coder中寫入數據 cocoa


NSKeyArchiver的方法

+(NSData*)archivedDataWithRootObject:(id)rootObject

相關文章
相關標籤/搜索