註1:準確地說,這依賴於iOS的版本。在iOS4中,UIImage未實現NSCoding協議,在iOS5中,UIImage實現了NSCoding協議。
對於自定義的類型,我們也可以參考這壹做法,即先將將自定義類型轉換為NSData,再對NSData進行歸檔。
問題在於,NSKeyedArchiver在歸檔壹個自定義對象時,怎麽知道如何將壹個自定義對象編碼為壹個NSData?而且,當我們從文件中反歸檔時,NSKeyedUnarchiver怎麽知道將NSData轉變為壹個自定義對象?
這就是NSCoding 協議需要解決的問題。實際上,NSCoding協議規定的兩個方法,分別用於解決這兩個問題。
當NSKeyedArchiver 在歸檔壹個對象時,將調用對象的encodeWithCoder:方法,用於將對象轉換為NSData(或NSString等其他5種類型);而NSKeyedUnarchiver在反歸檔壹個對象時,則調用對象的initWithCoder:方法,用於將NSData(或NSString等其他5種類