一、nskeyedarchiver和nsuserdefault的區別
nsuserdefault只能儲存基本資料型別,如nsinteger nsstring nsarray 但像uiimage就存不進去
將各種型別的物件儲存到檔案中,而不僅僅是字串、陣列和字典型別,有一種更靈活的方法。就是利用nskeyedaarchiver類建立帶鍵(keyed)的檔案來完成。
二、用法
所儲存的物件必須必須服從nssecurecoding協議
1、對於已經服從的型別,如nsstring、nsinteger可以直接使用
nskeyedarchiver-歸檔
//1.對需要儲存的資料進行編碼 ->nsdata *
nsdata *data = [nskeyedarchiver archiveddatawithrootobject:@"ios" requiringsecurecoding:yes error:nil];
//2.將二進位制資料儲存到檔案
//建立檔案
//建立檔案
[[nsfilemanager defaultmanager] createfileatpath:path contents:nil attributes:nil];
[data writetofile:path atomically:yes];
nskeyedunarchiver-解歸檔
//解歸檔
//獲取檔案路徑
//讀取檔案的內容
nsdata *data = [nsdata datawithcontentsoffile:path];
//將二進位制資料轉化為對應的物件型別
nsstring *str = [nskeyedunarchiver unarchivedobjectofclass:[nsstring class] fromdata:data error:nil];
nslog(@"%@", str);
2.對於其他型別,如自己建立的模型,需要服從協議,並且實現某些方法
person.h
#import ns_assume_nonnull_begin
@inte***ce person : nsobject@property (nonatomic, strong) nsstring *name;
@property (nonatomic, assign) nsinteger age;
@end
ns_assume_nonnull_end
person.m實現一些方法
#import "person.h"
@implementation person
+ (bool)supportssecurecoding
//歸檔的時候呼叫
//告訴編碼器該如何歸檔
//將這個物件哪些屬性編碼起來
- (void)encodewithcoder:(nscoder *)acoder
//解歸檔
- (instancetype)initwithcoder:(nscoder *)adecoder
return self;
}
使用
viewcontroller.m 歸檔
//建立person物件
person *jz = [person new];
jz.name = @"jz";
jz.age = 12;
//1.對需要儲存的資料進行編碼 ->nsdata *
nsdata *data = [nskeyedarchiver archiveddatawithrootobject:jz requiringsecurecoding:yes error:nil];
//2.將二進位制資料儲存到檔案
//建立檔案
//建立檔案
[[nsfilemanager defaultmanager] createfileatpath:path contents:nil attributes:nil];
[data writetofile:path atomically:yes];
解歸檔
//解歸檔
//獲取檔案路徑
//讀取檔案的內容
nsdata *data = [nsdata datawithcontentsoffile:path];
//將二進位制資料轉化為對應的物件型別
person *jz = [nskeyedunarchiver unarchivedobjectofclass:[person class] fromdata:data error:nil];
nslog(@"%@", jz);
收藏 用Margin還是用Padding
用margin還是用padding 何時應當使用margin 需要在border外側新增空白時。空白處不需要背景 色 時。上下相連的兩個盒子之間的空白,需要相互抵消時。如15px 20px的margin,將得到20px的空白。何時應當時用padding 需要在border內測新增空白時。空白處需要背...
用Margin還是用Padding
用margin還是用padding這個問題是每個學習css高階時的必經之路。css邊距屬性定義元素周圍的空間。通過使用單獨的屬性,可以對上 右 下 左的外邊距進行設定。也可以使用簡寫的外邊距屬性同時改變所有的外邊距。w3school 邊界 margin 元素周圍生成額外的空白區。空白區 通常是指其他...
用yaml寫用例
第一步 安裝yaml,在執行裡輸入 pip install pyyaml 檢驗是否安裝成功,在pycharm裡輸入 import yaml 第二步 建立乙個file,字尾寫yaml或yml 在yml檔案裡寫入單個使用者名稱和密碼 開啟yml檔案並以字典的形式列印出來 執行結果 在yml檔案裡寫入多個...