在ios開發中,有很多資料持久化的方案,接下來說一下常用的5種方案:
plist檔案(屬性列表)
preference(偏好設定)
nskeyedarchiver(歸檔)
sqlite
coredata
plist檔案是將某些特定的類,通過xml檔案的方式儲存在目錄中。
- (void)plist
// 讀取文字
nsstring *readstr = [[nsstring alloc] initwithcontentsoffile:path encoding:nsutf8stringencoding error:nil];
nslog(@"%@", readstr);
// 2.寫入陣列
nsarray *array = @[@"jerry", @"lily"];
writesuccess = [array writetofile:path atomically:yes];
if (writesuccess)
// 讀取陣列
nsarray *readarray = [nsarray arraywithcontentsoffile:path];
nslog(@"%@", readarray);
// 3.寫入字典
nsdictionary *dict = @;
writesuccess = [dict writetofile:path atomically:yes];
if (writesuccess)
// 讀取字典
nsdictionary *readdict = [nsdictionary dictionarywithcontentsoffile:path];
nslog(@"%@", readdict);
// 4.寫入nsdata
nsdata *data = [@"this is data" datausingencoding:nsutf8stringencoding];
writesuccess = [data writetofile:path atomically:yes];
if (writesuccess)
// 讀取nsdata
nsdata *readdate = [nsdata datawithcontentsoffile:path];
nsstring *redadatastr = [[nsstring alloc] initwithdata:readdate encoding:nsutf8stringencoding];
nslog(@"%@", redadatastr);
}
偏好設定是專門用來儲存應用程式的配置資訊的,一般不要在偏好設定中儲存其他資料。
如果沒有呼叫synchronize方法,系統會根據i/o情況不定時刻地儲存到檔案中。所以如果需要立即寫入檔案的就必須呼叫synchronize方法。
偏好設定會將所有資料儲存到同乙個檔案中。即preference目錄下(沙盒根路徑/library/preferences)的乙個以此應用包名來命名的plist檔案。
- (void)preference
歸檔在ios中是另一種形式的序列化,只要遵循了nscoding協議的物件都可以通過它實現序列化。由於決大多數支援儲存資料的foundation和cocoa touch類都遵循了nscoding協議,因此,對於大多數類來說,歸檔相對而言還是比較容易實現的。
注意點:
必須遵循並實現nscoding協議
儲存檔案的副檔名可以任意指定
繼承時必須先呼叫父類的歸檔解檔方法
@inte***ce
person : nsobject
@property (nonatomic, copy) nsstring *name;
@property (nonatomic, assign) int age;
@end
#import "person.h"
@implementation
person
// 歸檔
- (void)encodewithcoder:(nscoder *)acoder
// 解檔
- (instancetype)initwithcoder:(nscoder *)adecoder
return
self;
}@end
// 使用
- (void)archiver
// 物件解檔
person *unarchiverperson = [nskeyedunarchiver unarchiveobjectwithfile:path];
nslog(@"name = %@, age = %d", unarchiverperson.name, unarchiverperson.age);
}
以上方法不太適合儲存大量的內容,如果資料量較大一般會使用第三方封裝的資料庫庫, 比如fmdb.
// dbmanager.h
#import
"fmdb.h"
static nsstring * const table_base_data = @"t_base_data"; // 基礎資料表
@class fmdatabase;
@inte***ce dbmanager : nsobject
/** 資料庫管理類單例 */
+ (instancetype)sharedmanager;
@property (nonatomic, strong) fmdatabase *db; // 資料庫
@end
// dbmanager.m
static dbmanager *_manager;
static nsstring * const database_name = @"qinglian.sqlite"; // 資料庫表
@implementation dbmanager
#pragma mark - 單例
+ (instancetype)sharedmanager
); return _manager;
}+ (instancetype)alloc
return [super alloc];
}/** 建立資料庫 */
- (void)createdatabase
/** 建立所有的表 */
- (void)createtables
else
}/** 建立基礎資料表 */
- (void)createbasedatatable
}// 使用方法
/** 儲存基礎資料到資料庫 */
+ (void)insertbasedatatodb:(nsarray *)basedatas
nsstring *insertsql = [nsstring stringwithformat:@"insert into %@ (fid,checkpoint_code,installation_code,installation_type,installation_type_name,installation_name,installation_pile_kno,culvert_style,segment,segment_name,maintain_company,maintain_company_name,longitude,latitude,correct_longitude,correct_latitude) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", table_base_data];
nsinteger count = basedatas.count ? : 0;
for (int index = 0; index < count; index++)
}[db close];
}
coredata使用得比較少,後面補上. 重讀iOS 資料持久化1 持久化方案介紹
內存在斷點後就會清空重置,為了保持資料在斷點後保持,比如手機重啟,就需要把資料存放在硬碟裡,做持久化的儲存。為什麼不一直使用硬碟儲存,因為記憶體會比硬碟更快速。所以在程式的宣告週期裡,資料載入在記憶體裡,進行快速的計算,然後把需要持久儲存的資料儲存到硬碟裡。資料持久化就是怎麼把資料儲存到硬碟裡的技術...
iOS終端資料持久化
ios有很多資料持久化技術,包括傳統的資料庫,但也有一些較新的技術,它主要的持久化技術有 資料庫 屬性列表 物件歸檔和。本節將分別介紹這四種持久化方式,輔助本文在設計與實現中針對不同的需求選擇合適的資料持久化方式。資料庫技術被廣泛的使用在各大系統中,資料庫也是乙個系統的核心部分,資料庫管理系統如今發...
iOS 資料持久化 Plist
獲取plist檔案位址 nsstring path nsbundle mainbundle pathforresource people oftype plist 獲取plist檔案內容 乙個字典 nsdictionary dict nsdictionary dictionarywithconten...