iOS 歸檔 沙盒快取資料

2021-09-26 19:03:18 字數 3516 閱讀 3810

快取一條資料沒啥意義  實際開發中一般都是快取很多條資料或者是乙個dictionary甚至其他物件

tips:同一物件快取可以使用同一沙盒路徑  不同型別的資料千萬別使用同一沙盒路徑 不同型別資料如果使用同一路徑那麼快取的很可能就是最後歸檔的資料  我嘗試過   切記  

1、快取100條資料  資料內容為person物件

建立person類  遵守協議  

**如下person.h

#import

ns_assume_nonnull_begin

@inte***ceperson : nsobject

@property(nonatomic,assign)intage;

@property(nonatomic,strong)nsstring *name;

@end

ns_assume_nonnull_end

person.m

#import "person.h"

@implementationperson

歸檔- (void)encodewithcoder:(nscoder *)acoder{

[acoder encodeinteger:_age forkey:@"age"];

[acoder encodeobject:_name forkey:@"name"];

解檔- (instancetype)initwithcoder:(nscoder *)adecoder{

if(self== [superinit]) {

_age = [adecoder decodeintforkey:@"age"];

_name = [adecoder decodeobjectforkey:@"name"];

returnself;

@end

這裡我在viewdidload中實現歸檔快取,並對快取資料進行解檔   

**如下:

- (void)viewdidload {

[superviewdidload];

nsmutabledata *archiverdata = [nsmutabledata data];

nskeyedarchiver *archiver = [[nskeyedarchiver alloc]initforwritingwithmutabledata:archiverdata];

for(inti=0; i<100; i++) {

person *model = [[person alloc]init];

model.name = [nsstring stringwithformat:@"你好%d",i+1];

model.age  = i+1;

//歸檔資料

[archiver encodeobject:model forkey:[nsstring stringwithformat:@"person%d",i+1]];

//4.完成歸檔

[archiver finishencoding];

//5.將歸檔寫入

[archiverdata writetofile:path atomically:yes];

for(inti=0; i<100; i++) {

nsdata *unarchiverdata = [nsdata datawithcontentsoffile:path];

nskeyedunarchiver *unarchiver = [[nskeyedunarchiver alloc]initforreadingwithdata:unarchiverdata];

person *model  = [unarchiver decodeobjectforkey:[nsstring stringwithformat:@"person%d",i+1]];

nslog(@"age = %d\rname = %@",model.age,model.name);

列印結果如下顯示

切記多個dictionary不能快取到同一路徑

這裡我是網路請求後 對資料進行歸檔      **如下

afnmodel *model = result;

//1.使用data物件進行歸檔

nsmutabledata *archiverdata = [nsmutabledata data];

//2.建立歸檔物件

nskeyedarchiver *archiver = [[nskeyedarchiver alloc]initforwritingwithmutabledata:archiverdata];

//歸檔資料

[archiver encodeobject:model.data forkey:@"positiondict"];

//4.完成歸檔

[archiver finishencoding];

[archiverdata writetofile:[nsstring stringwithformat:@"%@%@",path,@"positiondict"] atomically:yes];

對快取的dictionary進行解檔 **如下:

+ (nsdictionary *)getdatawithkey:(nsstring *)key{

nsdata *unarchiverdata = [nsdata datawithcontentsoffile:[nsstring stringwithformat:@"%@%@",path,key]];

nskeyedunarchiver *unarchver = [[nskeyedunarchiver alloc]initforreadingwithdata:unarchiverdata];

return[unarchver decodeobjectforkey:key];

iOS沙盒與清除快取

sandbox,沙盒機制,是一種安全體系。我們所開發的每乙個應用程式在裝置上會有乙個對應的沙盒資料夾,當前的程式只能在自己的沙盒資料夾中讀取檔案,不能訪問其他應用程式的沙盒。在專案中新增的所有非 的資源,比如 聲音 屬性列表等都存在自己的沙盒中。此外,在程式執行中動態生成的或者從網路獲取的資料,如果...

iOS沙盒 一 沙盒機制

1 ios沙盒機制 ios應用程式只能在為該改程式建立的檔案系統中讀取檔案,不可以去其它地方訪問,此區域被成為沙盒,所以所有的非 檔案都要儲存在此,例如影象,圖示,聲音,映像,屬性列表,文字檔案等。1.1 每個應用程式都有自己的儲存空間 1.2 應用程式不能翻過自己的圍牆去訪問別的儲存空間的內容 1...

IOS 沙盒機制

ios沙盒機制 sandbox ios中的沙盒機制是一種安全體系,它規定了應用程式只能在為該應用程式建立的資料夾裡讀取檔案,不可以訪問其他地方的內容,所有的非 檔案都儲存在這個地方,比如 聲音 屬性列表和文字檔案等。1.每個應用程式都在自己的沙盒內 2.應用程式間不能共享資料,不能隨意去訪問別的應用...